前端实用知识-用express搭建本地服务器

news2024/11/28 22:57:40

目录

一、为什么会有这篇文章?

二、使用前的准备-如环境、工具

三、如何使用?-express常用知识点

四、代码演示-配合截图,简单易懂


一、为什么会有这篇文章?

 在日常前端开发中,我们离不开数据,可能是用于页面内容展示方便调样式、测试接口问题等等。在合作的过程中,我们如果需要数据的时候,但前后端的开发进度不一致,我们作为前端开发者,可以先模拟本地服务器和假数据进行测试,实现简单的前后端通信。

本地服务器为开发者提供了一个隔离的环境,便于测试代码、确保应用的安全性和稳定性,同时加快了开发流程。而模拟后端数据则允许前端在没有真实后端支持的情况下进行界面和功能的测试,提高了开发效率,确保了用户体验的一致性。这两者结合使用,能有效提升项目的开发质量和速度。

二、使用前的准备-如环境搭建、工具

安装下载node(express是node的一个框架,node自然是必备的)

注意:下载安装和配置node非本文重点的,所以有需要node的详细安装和下载,请自行搜索。

node下载地址:

Node.js — 在任何地方运行 JavaScript

安装下载express框架

Express - Node.js Web 应用程序框架 - Express中文文档 | Express中文网

如果你已经处理好nodejs,可以直接执行以下命令,创建项目和安装express

 新建一个文件夹,打开终端,执行以下命令:

npm init -y
npm install express cors body-parser

//cors解决跨域问题

//body-parser: Express 中间件,用于解析 HTTP 请求体中的数据,支持 JSON、URL 编码和多部分表单数据,让我们可以直接使用数据。

 (我用的是node18.16.0版本来演示这次案例)

 正常情况下,看到这里就是初始化和安装成功了。

三、如何使用?-express常用知识点

在项目文件夹下创建一个server.js文件,写入以下代码:

const express = require('express')
const cors = require('cors')

const app = express() //创建一个express实例
const port = 7000 //这里设置的7000,也就是http://localhost:7000
//服务启动的端口号(只要符合端口要求,都可以设置,比如常用端口3000,4000,5000这些都可以)

app.use(cors()) // 解决跨域问题,这里是设置所有域名都可以访问
// 使Express能够解析JSON格式的请求体
app.use(express.json());
// 启动服务器
app.listen(port, () => {
  console.log(`Server is running on http://localhost:${port}`)
})

 打开终端,执行文件:

能看到这个,则表示服务器已经启动。

接下来开始写请求。

get方法

get 方法是 Express 框架中用于处理 HTTP GET 请求的简便方法。它允许你定义路由处理程序,当客户端发送 GET 请求到指定路径时,这些处理程序会被触发。get 方法的基本语法如下:

  • path:这是客户端请求的路径,可以是字符串或字符串数组。
  • callback:这是当请求到达时执行的函数,通常包含两个参数:req(请求对象)和res(响应对象)。

测试get方法:

在server.js文件新增以下代码:


//案例一:
app.get('/hello', (req, res) => {
  res.send('Hello World!');
});


//案例二:

let data = [
  { question: '你好吗?', answer: '我很好,谢谢!' },
  { question: '今天天气怎么样?', answer: '今天天气不错,适合外出。' },
  { question: '你会什么技能?', answer: '我会编程、设计和解决问题。' },
  { question: '你是谁?', answer: '我是你的智能助手。' },
]

// 获取所有问题和答案的路由
app.get('/api/qna', (req, res) => {
  res.json(data)
})

重新启动服务

node server.js

打开浏览器,分别访问接口地址:

(注意:端口号(我这里设置的7000)根据你自己设置的进行修改)

http://localhost:7000/hello

http://localhost:7000/api/qna

 

post方法

在Express框架中,post 方法用于处理HTTP POST请求,它允许你接收客户端发送的数据,通常用于表单提交或API交互。

app.post(path, callback);

  • path:客户端请求的路径。
  • callback:请求到达时执行的函数,包含req(请求对象)和res(响应对象)两个参数。

req对象包含了请求体(request body),你可以从中获取客户端发送的数据。

 在sever.js中新增以下代码:

// 定义一个POST请求处理程序,接收id和name参数
app.post('/api/submit', (req, res) => {
  // 从请求体中获取id和name
  const { id, name } = req.body

  // 检查id和name是否都存在
  if (!id || !name) {
    return res.status(400).json({ error: 'Both id and name are required' })
  }

  // 处理id和name,例如保存到数据库或进行其他操作
  // 这里只是简单地返回接收到的值
  let successFlag = 'true'
  res.status(200).json({ id, name, successFlag })
  console.log('Received data:', req.body)   //post请求发送成功后,在控制台显示的请求体数据
}) 

重新启动服务

node server.js

测试post请求

打开apipost(一个调试接口的工具,有需要自行搜索下载)看图按步骤进行

新建POST接口-写入接口地址-写入需要的参数(json格式,这里我们需要id和name参数)-发送-查看响应结果

 点击发送后,如果你在下方能看见数据响应,则表示接口测试通过。

 同时在终端,你也可以看见如下信息。

(因为我们在post方法中书写了一条控制台打印语句)

console.log('Received data:', req.body)   //post请求发送成功后,在控制台显示的请求体数据

四、配合前端框架vue使用

使用的前端热门框架vue,本次案例用的vue2

注意,发送请求需要用到axios。

在前端项目文件的终端输入以下命令:

npm install axios

(而且前端每次安装完新的东西后,都需要重新启动前端项目。)

前端文件

<template>
    <div>
      <div>
        <h2>测试GET请求</h2>
        <button @click="getTestData">点击发送</button>
        <p v-if="getSuccess">{{ getResponse }}</p>
        <p v-if="getError">{{ getError }}</p>
      </div>
      <div>
        <h2>测试POST请求</h2>
        <input v-model="postData" placeholder="Enter data for POST request" />
        <button @click="postTestData">点击发送</button>
        <p v-if="postSuccess">{{ postResponse }}</p>
        <p v-if="postError">{{ postError }}</p>
      </div>
    </div>
</template>

<script>
import axios from "axios";
export default {
  data() {
    return {
      // 测试用的数据
      getResponse: "",
      getSuccess: false,
      getError: "",
      postResponse: "",
      postSuccess: false,
      postError: "",
      postData: "",
    };
  },
  methods: {
    handleClick(event) {
      console.log("Button clicked!", event);
    },
    getTestData() {
      axios
        .get("http://localhost:7000/hello")
        .then((response) => {
          this.getSuccess = true;
          this.getResponse = response.data;
        })
        .catch((error) => {
          this.getError = error.message;
        });
    },
    postTestData() {
      console.log("即将发送post的数据是,", this.postData);
      if (!this.postData) {
        return;
      } else {
        axios
          .post("http://localhost:7000/api/submit", { data: this.postData })
          .then((response) => {
            this.postSuccess = true;
            this.postResponse = response.data;
          })
          .catch((error) => {
            this.postError = error.message;
          });
      }
    },
  },
};
</script>

<style>
button {
  margin: 20px;
}
</style>

 页面效果大致如下:

注意:测试的时候,需要启动服务器(服务器项目文件终端执行,node server.js)

后端文件

const express = require('express')
const cors = require('cors')

const app = express() //创建一个express实例
const port = 7000 //这里设置的6000,也就是localhost:60000
//服务启动的端口号(只要符合端口要求,都可以设置,比如常用端口3000,4000,5000这些都可以)

app.use(cors()) // 解决跨域问题,这里是设置所有域名都可以访问
// 使Express能够解析JSON格式的请求体
app.use(express.json())


app.get('/hello', (req, res) => {
  res.send('Hello World!')
})


// 定义一个POST请求处理程序,接收id和name参数
app.post('/api/submit', (req, res) => {
  // 从请求体中获取text
  const { text } = req.body

  // 检查text是否存在
  if (!text) {
    return res.status(400).json({ error: 'not exist!' })
  } else {
    // 这里只是简单地返回一个‘true’的字符串。
    let successFlag = 'true'
    res.status(200).json({ successFlag })
    console.log('Received data:', req.body) //post请求发送成功后,在控制台显示的请求体数据
  }
})

// 启动服务器
app.listen(port, () => {
  console.log(`Server is running on http://localhost:${port}`)
})

 测试GET请求

打开调试工具-网络-查看发送的请求

测试POST请求

输入文本-点击发送


就暂且写到这里,后续有空再完善和补充一些内容细节。

如果你喜欢这篇文章,可以点赞、收藏。

关注我,交流和分享前端知识。-1127

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2249355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis(概念、IO模型、多路选择算法、安装和启停)

一、概念 关系型数据库是典型的行存储数据库&#xff0c;存在的问题是&#xff0c;按行存储的数据在物理层面占用的是连续存储空间&#xff0c;不适合海量数据存储。 Redis在生产中使用的最多的是用作数据缓存。 服务器先在缓存中查询数据&#xff0c;查到则返回&#xff0c;…

C#基础控制台程序

11.有一个54的矩阵&#xff0c;要求编程序求出其中值最大的那个元素的值&#xff0c;以及其所在的行号和列号。 12.从键盘输入一行字符&#xff0c;统计其中有多少个单词&#xff0c;单词之间用空格分隔开。 13.输入一个数&#xff0c;判断它是奇数还是偶数&#xff0c;如果…

Flink开发入门简单案例--统计实时流订单

Flink开发入门简单案例 0.简介1.订单数据生成器1.1 新建工程TestFlink1.2 在pom.xml中引入Flink依赖包1.3 订单数据生成类订单类&#xff08;Item&#xff09;订单生成数据流类测试订单生成类 2.订单统计2.1 仅统计订单中商品的件数 2.2 同时统计商品数量和金额 0.简介 本案例…

AI前景分析展望——GPTo1 SoraAI

引言 人工智能&#xff08;AI&#xff09;领域的飞速发展已不仅仅局限于学术研究&#xff0c;它已渗透到各个行业&#xff0c;影响着从生产制造到创意产业的方方面面。在这场技术革新的浪潮中&#xff0c;一些领先的AI模型&#xff0c;像Sora和OpenAI的O1&#xff0c;凭借其强大…

PAT1085 Perfect Sequence(25)

//判断是否是连续的数 //判断是否只能第一个数是最小值 #include <cstdio> #include <algorithm> typedef long long ll; using namespace std; int n,p; const int maxn 100010; int arr[maxn];int binary(int l, int r, ll tgt){if(arr[n-1] < tgt) return n…

QChart数据可视化

目录 一、QChart基本介绍 1.1 QChart基本概念与用途 1.2 主要类的介绍 1.2.1 QChartView类 1.2.2 QChart类 1.2.3QAbstractSeries类 1.2.4 QAbstractAxis类 1.2.5 QLegendMarker 二、与图表交互 1. 动态绘制数据 2. 深入数据 3. 缩放和滚动 4. 鼠标悬停 三、主题 …

SpringBoot源码-spring boot启动入口ruan方法主线分析(一)

一、SpringBoot启动的入口 1.当我们启动一个SpringBoot项目的时候&#xff0c;入口程序就是main方法&#xff0c;而在main方法中就执行了一个run方法。 SpringBootApplication public class StartApp {public static void main(String[] args) {// testSpringApplication.ru…

C#变量和函数如何和unity组件绑定

1.Button On_click (1)GameObject通过Add component添加上Script (2)Button选GameObject组件而不是直接选Script,直接选Script出现不了Script中的函数 2.RawImage 上面是错的 3.Text 上面是错的&#xff0c;应该是直接在GameObject里面填上对应的值 总结&#xff1a; …

Flink Sink的使用

经过一系列Transformation转换操作后&#xff0c;最后一定要调用Sink操作&#xff0c;才会形成一个完整的DataFlow拓扑。只有调用了Sink操作&#xff0c;才会产生最终的计算结果&#xff0c;这些数据可以写入到的文件、输出到指定的网络端口、消息中间件、外部的文件系统或者是…

【Spring MVC】如何获取cookie/session以及响应@RestController的理解,Header的设置

前言 &#x1f31f;&#x1f31f;本期讲解关于SpringMVC的编程之参数传递~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废…

使用 exe4j 将 Spring Boot 项目打包为 EXE 可执行文件

使用 exe4j 将 Spring Boot 项目打包为 EXE 可执行文件 文章目录 使用 exe4j 将 Spring Boot 项目打包为 EXE 可执行文件什么是 exe4j准备工作打包 Spring Boot 项目为 EXE 文件1.启动 exe4j2. 选择项目类型3. 配置项目名称和输出目录4. 配置项目类型或可执行文件名称5. java配…

前端JavaScript(一)---基本介绍

Javascript是一种由Netscape(网景)的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言&#xff0c;主要目的是为了解决服务器端语言&#xff0c;比如Perl&#xff0c;遗留的速度问题&#xff0c;为客户提供更流畅的浏览效果。当时服务端需要对…

阿里Qwen系列开源模型介绍

模型种类丰富 Qwen2&#xff1a;包含Qwen2-0.5b、Qwen2-1.5b、Qwen2-7b、Qwen2-57b-a14b以及Qwen2-72b等五种规模的预训练和指令微调模型&#xff0c;其在多语言处理、长文本处理、代码生成、数学和逻辑推理等能力上&#xff0c;在mmlu、gpqa、humaneval等国际测评中得到了验证…

基于Java的小程序电商商城开源设计源码

近年来电商模式的发展越来越成熟&#xff0c;基于 Java 开发的小程序电商商城开源源码&#xff0c;为众多开发者和企业提供了构建个性化电商平台的有力工具。 基于Java的电子商城购物平台小程序的设计在手机上运行&#xff0c;可以实现管理员&#xff1b;首页、个人中心、用户…

开源 AI 智能名片 2 + 1 链动模式 S2B2C 商城小程序源码助力品牌共建:价值、策略与实践

摘要&#xff1a;在当今数字化商业环境下&#xff0c;品牌构建已演变为企业与消费者深度共建的过程。本文聚焦于“开源 AI 智能名片 2 1 链动模式 S2B2C 商城小程序源码”&#xff0c;探讨其如何融入品牌建设&#xff0c;通过剖析品牌价值构成&#xff0c;阐述该技术工具在助力…

力扣797. 所有可能的路径

算法思想 深度优先搜索&#xff08;DFS&#xff09;&#xff1a; 使用递归从节点 0 开始&#xff0c;探索所有从当前节点到终点 n−1 的路径。每次访问一个节点时&#xff0c;将该节点加入当前路径 path。 回溯法&#xff1a; 在递归返回时&#xff0c;通过 path.pop_back()…

AMD(Xilinx) FPGA配置Flash大小选择

目录 1 FPGA配置Flash大小的决定因素2 为什么选择的Flash容量大小为最小保证能够完成整个FPGA的配置呢&#xff1f; 1 FPGA配置Flash大小的决定因素 在进行FPGA硬件设计时&#xff0c;选择合适的配置Flash是我们进行硬件设计必须考虑的&#xff0c;那么配置Flash大小的选择由什…

Git简单介绍

一、 Git介绍与安装 1.1 Git简介 Git是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。 1.2集中式(SVN&#xff09; VS 分布式(git) 集中式版本控制系统&#xff0c;版本库是集中存放在中央服务器的&#xff0c;工作时要先从中央…

FreeSWITCH 简单图形化界面34 - 网络环境安全的情况下,进行任意SIP注册

FreeSWITCH 简单图形化界面34 -网络环境安全的情况下&#xff0c;进行任意SIP注册 测试环境1、前言2、参数3、实践一下 测试环境 http://myfs.f3322.net:8020/ 用户名&#xff1a;admin&#xff0c;密码&#xff1a;admin FreeSWITCH界面安装参考&#xff1a;https://blog.cs…

力扣 二叉树的层序遍历-102

二叉树的层序遍历-102 class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> res; // 二维数组用来存储每层节点if (root nullptr)return res;queue<TreeNode*> q; // 队列用来进行层序遍历q.push(r…