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

目录

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

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

三、如何使用?-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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用nextjs开发时遇到的问题

这几天已经基本把node后端的接口全部写完了&#xff0c;在前端开发时考虑时博客视频类型&#xff0c;考虑了ssr&#xff0c;于是选用了nextJs&#xff0c;用的是nextUi,tailwincss,目前碰到两个比较难受的事情。 1.nextUI个别组件无法在服务器段渲染 目前简单的解决方法&…

【数据结构】二叉树(2)

目录 1. 二叉树的遍历 前序遍历 中序遍历 后序遍历 2. 计算二叉树中的节点个数 3. 计算二叉树中叶子节点个数 4. 计算二叉树的深度 5. 计算二叉树第k层节点个数 6. 二叉树基础练习 7. 二叉树的创建 8. 二叉树的销毁 9. 层序遍历 10. 判断二叉树是否为完全二叉树 1…

比特币与区块链原理解析:矿机挖矿与去中心化的未来

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

StarRocks-join优化

1、背景 有两个大表&#xff0c;都是6kw级别上下的&#xff0c;通过SR然后包装了一个接口对外提供查询&#xff0c;当前的问题是&#xff0c;这样大的join查询会导致BE直接宕机。并且这个sql很有代表性&#xff0c;我截图如下&#xff1a; 这个表是个单分区&#xff0c;所以直接…

Qt中2D绘制系统

目录 一、Qt绘制系统 1.1Qt绘制基本概念 1.2 绘制代码举例 1.3画家 1.3.1 QPainter的工作原理&#xff1a; 1.3.2 自定义绘制饼状图&#xff1a; 1.4画笔和画刷 1.4.1画笔 1.4.2 画刷填充样式 1.5 反走样和渐变 1.6绘制设备 1.7坐标变换 1.8QPainterPath 1.9绘制文…

基于.NET调用WebService服务

基于.NET调用WebService服务 上一篇文章用java的Spring Boot框架搭建了一个WebService服务端&#xff0c;这篇文章通过.NET进行调用&#xff0c;下文基于Visual Studio 2022 引入WebService服务 项目右键 -> 添加 -> 服务引用 选择WCF Web Service&#xff0c;点击下一…

IIC 随机写+多次写 可以控制写几次

verilog module icc_tx#(parameter SIZE 2 , //用来控制写多少次 比如地址是0000 一个地址只能存放8bit数据 超出指针就会到下一个地址0001parameter CLK_DIV 50_000_000 ,parameter SPEED 100_000 ,parameter LED 50 )( input wire c…

微信小程序+Vant-自定义选择器组件(多选

实现效果 无筛选&#xff0c;如有需要可参照单选组件中的方法.json文件配置"component": true,columns需要处理成含dictLabel和dictValue字段&#xff0c;我是这样处理的&#xff1a; let list arr.map(r > {return {...r,dictValue: r.xxxId,dictLabel: r.xxx…

基于边缘智能网关的机房安全监测应用

随着我国工业互联网的扎实推进&#xff0c;越来越多地区积极建设信息基础设施&#xff0c;以充沛算力支撑产业物联网的可持续发展&#xff0c;数据机房就是其中的典型代表。而且随着机房规模的扩大&#xff0c;对于机房的安全管理难题挑战也日益增加。 面向数据机房安全监测与管…

HarmonyOS 应用跨团队 Debug 协作

文章目录 前言案例背景与问题分析问题背景问题分析工具 方法与代码实现前端模块的优化&#xff1a;日志记录与网络监听日志记录代码示例代码解析实现逻辑实际应用场景 网络状态监听代码示例代码解析实现逻辑实际应用场景 后端模块的优化&#xff1a;接口性能与容错机制接口性能…

《UnityShader 入门精要》更复杂的光照

代码&示例图见&#xff1a;zaizai77/Shader-Learn: 实现一些书里讲到的shader 到了这里就开启了书里的中级篇&#xff0c;之后会讲解 Unity 中的渲染路径&#xff0c;如何计算光照衰减和阴影&#xff0c;如何使用高级纹理和动画等一系列进阶内容 Unity 中的渲染路径 在U…

Ubuntu20.04安装kalibr

文章目录 环境配置安装wxPython下载编译测试报错1问题描述问题分析问题解决 参考 环境配置 Ubuntu20.04&#xff0c;python3.8.10&#xff0c;boost自带的1.71 sudo apt update sudo apt-get install python3-setuptools python3-rosinstall ipython3 libeigen3-dev libboost…

P1198 [JSOI2008] 最大数

P1198 [JSOI2008] 最大数https://www.luogu.com.cn/problem/P1198 牵制芝士&#xff1a;单调队列 思路&#xff1a; 我们的任务是找出一个区间最大值的 因为插入的数与上一次的答案有关 所以它是强制在线的&#xff08;真无语了&#xff09; 我们可以在每次插入时整一个叫…

宠物电商对接美团闪购:实现快速配送与用户增值

随着宠物行业的快速发展&#xff0c;宠物电商市场也在不断扩张。消费者的需求不再局限于传统的线上购物模式&#xff0c;越来越多的人开始追求更快捷的配送服务和更优质的购物体验。为了适应这一趋势&#xff0c;许多宠物电商平台开始寻求与本地配送平台合作&#xff0c;以提供…

阿里云oss转发上线-实现不出网钓鱼

本地实现阿里云oss转发上线&#xff0c;全部代码在文末&#xff0c;代码存在冗余 实战环境 被钓鱼机器不出网只可访问内部网络包含集团oss 实战思路 若将我们的shellcode文件上传到集团oss上仍无法上线&#xff0c;那么就利用oss做中转使用本地转发进行上线&#xff0c;先发送…

新型大语言模型的预训练与后训练范式,阿里Qwen

前言&#xff1a;大型语言模型&#xff08;LLMs&#xff09;的发展历程可以说是非常长&#xff0c;从早期的GPT模型一路走到了今天这些复杂的、公开权重的大型语言模型。最初&#xff0c;LLM的训练过程只关注预训练&#xff0c;但后来逐步扩展到了包括预训练和后训练在内的完整…

C#结构体排序(数组)

结构体排序&#xff08;数组&#xff09; 1 示例1.1 以PointF为例展示效果1.2 运行结果展示 2实际运用2.1 创建结构体2.2 调用示例2.3 运行结果展示 1 示例 1.1 以PointF为例展示效果 private void button1_Click(object sender, EventArgs e) {Random random new Random();…

前端高频面试题-并发请求

面试题中&#xff0c;有一道题经常会出现&#xff0c;咱们下面讲一下思路以及写法写一个方法&#xff0c;传入一个请求地址数组&#xff0c;以及一个并发数量&#xff0c;根据并发数量&#xff0c;一起发送请求。如果一个发送完&#xff0c;那么从数组中拿出来一个接着发送&…

RabbitMQ7:消息转换器

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…

螺旋矩阵(java)

题目描述 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 代码思路&#xff1a; class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> list new ArrayList<>(); …