node.js 学习入门(07 - express 模块创建基本 web 服务器)(下)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: node.js 学习入门(07 - express 模块创建基本 web 服务器)

9. 内置中间件的使用

解析表单中 JSON、url-encoded 格式数据的方法

const express = require('express')
const app = express()
// 注意:除了错误级别的中间件,其他的中间件,必须在路由之前进行配置
// 通过 express.json() 这个中间件,解析表单中的 JSON 格式的数据
app.use(express.json())
// 通过 express.urlencoded() 这个中间件,来解析 表单中的 url-encoded 格式的数据
app.use(express.urlencoded({extended:false}))
// 创建路由
app.post('/', (req, res) => {
    // 在服务器,可以使用 req.body 这个属性,来接收客户端发送过来的请求体数据
    // 默认情况下,如果不配置解析表单数据的中间件,则 req.body 默认等于 undefined
    res.send("ok")
})
app.listen(80, () => {
    console.log("express server running at http://127.0.0.1")
})

10. body-parser中间件的使用

作用和内置中间件类似,的是用来解析 url-encoded 格式数据的方法,需要进行安装和引入

  • 安装body-parser中间件的指令
npm install body-parser
  • body-parser中间件的使用方法
const express = require('express')
const app = express()
// 导入中间件 body-parser
const parser = require('body-parser')
//  和内置中间件类似
app.use(parser.urlencoded({extended:false}))
// app.use(express.urlencoded({extended:false}))
// 创建路由
app.get('/user', (req, res) => {
    // 如果没有配置任何解析表单数据的中间件,则 req.body 默认等于 undefined
    console.log(req.body)
    res.send("ok")
})
app.listen(80, () => {
    console.log("express server running at http://127.0.0.1")
})

11. 自定义解析表单数据的中间件

自己定义一个解析 url-encoded 格式数据的方法

const express = require('express')
const app = express()
// 导入 node.js 内置的 querystring 模块
const qs = require('querystring')
// 这是解析表单数据的中间件
app.use((req, res, next) => {
    // 定义中间件具体的业务逻辑
    // 1. 定义一个 str 字符串,专门用来存储客户端发送过来的请求数据
    let str = ''
    // 2. 监听 req 的 data 事件
    req.on('data', (chunk) => {
        str += chunk
    })
    // 3. 监听 req 的 end 事件
    req.on('end', () => {
        // 在 str 中存放的是完整的请求体数据
        // console.log(str)
        // TODO:把字符串格式的请求体数据,解析成对象格式
        const body = qs.parse(str)
        req.body = body
        next()
    })
})
// 创建路由
app.post('/user', (req, res) => {
    res.send(req.body)
})
app.listen(80, () => {
    console.log("express server running at http://127.0.0.1")
})

12. 解决接口跨域问题

安装 cors 插件

npm install cors

引入 cors 插件,并把 cors 注册为全局中间件

一定要在路由之前,配置 cors 这个中间件,从而解决接口跨域的问题

const cors = require('cors')
app.use(cors())

13. 使用 express 写接口

下面的案例引用了 express 中的所有方法

  • 入口文件
// 导入 express
const express = require('express')
// 创建服务器实例
const app = express()
// 配置解析表单数据的中间件
app.use(express.json())
app.use(express.urlencoded({extended:false}))
// 必须在配置 cors 中间件之前,配置 JSONP 的接口
app.get('/api/jsonp', (req, res) => {
    // TODO:定义 JSONP 接口具体的实现过程
    // 1. 得到函数的名称
    const funcName = req.query.callback
    // 2. 定义要发送到客户端的数据对象
    const data = {name:'zs',age:18}
    // 3. 拼接出一个函数的调用
    const scriptStr = `${funcName}(${JSON.stringify(data)})`
    // 4. 把拼接的字符串,响应给客户端
    res.send(scriptStr)
})
//一定要在路由之前,配置 cors 这个中间件,从而解决接口跨域的问题
const cors = require('cors')
app.use(cors())
// 导入路由模块
const router = require('./18-apiRouter')
// 把路由模块,注册到 app 上
app.use('/api',router)
// 启动服务器
app.listen(80, () => {
    console.log("express server running at http://127.0.0.1")
})
  • 接口文件
const express = require('express')
const router = express.Router()
// 在这里挂载对应的路由
router.get('/get', (req, res) => {
    // 通过 req.query 获取客户端通过查询字符串,发送到服务器的数据
    const query = req.query
    // 调用 res.send() 方法,向客户端响应处理的结果
    res.send({
        status: 0, // 0 表示处理成功,1 表示处理失败
        msg: "GET 请求成功!", // 状态的描述
        data:query, // 需要响应给客户端的数据
    })
})
// 定义 post 接口
router.post('/post', (req, res) => {
    // 通过 req.body 获取请求体中包含的 url-encoded 格式的数据
    const body = req.body
    // 调用 res.send() 方法,向客户端响应处理的结果
    res.send({
        status: 0, // 0 表示处理成功,1 表示处理失败
        msg: "POST 请求成功!", // 状态的描述
        data:body, // 需要响应给客户端的数据
    })
})
// 定义 DELETE 接口(预检请求)
// 简单请求的特点:客户端和服务器之间只会发生一次请求
// 预检请求的特点:客户端和服务器之间只会发生二次请求,OPTION 预检请求之后,才会发起真正的请求
router.delete('/delete', (req, res) => {
    // 通过 req.body 获取请求体中包含的 url-encoded 格式的数据
    // const body = req.body
    // 调用 res.send() 方法,向客户端响应处理的结果
    res.send({
        status: 0, // 0 表示处理成功,1 表示处理失败
        msg: "DELETE 请求成功!", // 状态的描述
        // data:body, // 需要响应给客户端的数据
    })
})
module.exports = router

14. cors请求的分类

客户端在请求 CORS 接口时,根据请求方式和请求头的不同,可以将 CORS 的请求分为两大类,分别是:

  • 简单请求
  • 预检请求

简单请求:


同时满足以下两大条件的请求,就属于简单请求

请求方式:GET、POST、HEAD 三者之一

HTTP 头部信息不超过9种字段


预检请求:


只要符合以下任何一个条件的请求,都需要进行预检请求

请求方式为 GET、POST、HEAD 之外的请求 Method 类型

请求头中包含自定义头部字段

向服务器发送了 application/json 格式的数据

以上就是 node.js 中 使用 express 模块创建基本 web 服务器的方法,不懂得也可以在评论区里问我,以后会持续发布一些新的功能,敬请关注。


相关文章
|
14天前
|
数据采集 JavaScript 搜索推荐
服务器端渲染(SSR)(Nuxt+Next.js)
服务器端渲染(SSR)技术在服务器上生成页面HTML,提升首屏加载速度和SEO效果。Nuxt.js和Next.js分别是基于Vue.js和React.js的流行SSR框架。Nuxt.js提供自动化路由管理、页面级数据获取和布局系统,支持SSR和静态站点生成。Next.js支持SSR、静态生成和文件系统路由,通过`getServerSideProps`和`getStaticProps`实现数据获取。SSR的优点包括首屏加载快、SEO友好和适合复杂页面,但也会增加服务器压力、开发限制和调试难度。选择框架时,可根据项目需求和技术栈决定使用Nuxt.js或Next.js。
|
16天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
15天前
|
移动开发 前端开发 JavaScript
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
于辰在大学期间带领团队参考网易游戏官网的部分游戏页面,开发了一系列前端实训作品。项目包括首页、2021校园招聘页面和明日之后游戏页面,涉及多种特效实现,如动态图片切换和人物聚合效果。作品源码已上传至CSDN,视频效果可在CSDN预览。
25 0
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
|
15天前
|
Web App开发 JavaScript 前端开发
探索后端开发:Node.js与Express的完美结合
【10月更文挑战第33天】本文将带领读者深入了解Node.js和Express的强强联手,通过实际案例揭示它们如何简化后端开发流程,提升应用性能。我们将一起探索这两个技术的核心概念、优势以及它们如何共同作用于现代Web开发中。准备好,让我们一起开启这场技术之旅!
30 0
|
15天前
|
Web App开发 JavaScript 前端开发
构建高效后端服务:Node.js与Express框架的实践
【10月更文挑战第33天】在数字化时代的浪潮中,后端服务的效率和可靠性成为企业竞争的关键。本文将深入探讨如何利用Node.js和Express框架构建高效且易于维护的后端服务。通过实践案例和代码示例,我们将揭示这一组合如何简化开发流程、优化性能,并提升用户体验。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
16天前
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的融合之道
【10月更文挑战第31天】在追求快速、灵活和高效的后端开发领域,Node.js与Express框架的结合如同咖啡遇见了奶油——完美融合。本文将带你探索这一组合如何让后端服务搭建变得既轻松又充满乐趣,同时确保你的应用能够以光速运行。
24 0
|
JavaScript 前端开发 关系型数据库
|
2月前
|
JavaScript
NodeJs的安装
文章介绍了Node.js的安装步骤和如何创建第一个Node.js应用。包括从官网下载安装包、安装过程、验证安装是否成功,以及使用Node.js监听端口构建简单服务器的示例代码。
NodeJs的安装
|
1月前
|
JavaScript 开发工具 git
已安装nodejs但是安装hexo报错
已安装nodejs但是安装hexo报错
30 2
|
2月前
|
存储 JavaScript 前端开发
Node 版本控制工具 NVM 的安装和使用(Windows)
本文介绍了NVM(Node Version Manager)的Windows版本——NVM for Windows的安装和使用方法,包括如何安装Node.js的特定版本、列出已安装版本、切换使用不同版本的Node.js,以及其他常用命令,以实现在Windows系统上对Node.js版本的便捷管理。
Node 版本控制工具 NVM 的安装和使用(Windows)

热门文章

最新文章