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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 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 服务器的方法,不懂得也可以在评论区里问我,以后会持续发布一些新的功能,敬请关注。


相关文章
|
1月前
|
缓存 负载均衡 JavaScript
构建高效后端服务:Node.js与Express框架实践
在数字化时代的浪潮中,后端服务的重要性不言而喻。本文将通过深入浅出的方式介绍如何利用Node.js及其强大的Express框架来搭建一个高效的后端服务。我们将从零开始,逐步深入,不仅涉及基础的代码编写,更会探讨如何优化性能和处理高并发场景。无论你是后端新手还是希望提高现有技能的开发者,这篇文章都将为你提供宝贵的知识和启示。
|
1月前
|
Web App开发 JavaScript 前端开发
如何学习JavaScript?
如何学习JavaScript?
48 5
|
1月前
|
JavaScript 前端开发 索引
JavaScript学习第二章--字符串
本文介绍了JavaScript中的字符串处理,包括普通字符串和模板字符串的使用方法及常见字符串操作方法如`charAt`、`concat`、`endsWith`等,适合前端学习者参考。作者是一位热爱前端技术的大一学生,专注于分享实用的编程技巧。
30 2
|
1月前
|
JavaScript
使用node.js搭建一个express后端服务器
Express 是 Node.js 的一个库,用于搭建后端服务器。本文将指导你从零开始构建一个简易的 Express 服务器,包括项目初始化、代码编写、服务启动与项目结构优化。通过创建 handler 和 router 文件夹分离路由和处理逻辑,使项目更清晰易维护。最后,通过 Postman 测试确保服务正常运行。
63 1
|
1月前
|
存储 JavaScript 前端开发
JavaScript学习第一章
本文档介绍了JavaScript的基础知识,包括其在网页中的作用、如何通过JavaScript动态设置HTML元素的CSS属性,以及JavaScript中的变量类型(`var`、`let`、`const`)和数据类型(基本数据类型与引用数据类型)。通过实例代码详细解释了JavaScript的核心概念,适合初学者入门学习。
54 1
|
1月前
|
Web App开发 JSON JavaScript
Node.js 中的中间件机制与 Express 应用
Node.js 中的中间件机制与 Express 应用
|
弹性计算 C语言 容器
云服务器EC云上开发学习体验
简述通过老师引导,自己学习体验个人简历网页的设计以及在这一过程遇到的一些小问题,最后是一些感悟与成长。
云服务器EC云上开发学习体验
|
弹性计算 编译器 开发工具
ECS给线上学习带来的全新体验
本文介绍了作者在学习面向对象编程基础这门课程时借助ECS的高效性与便利性大大提升了学习效率的学习经验,以及在使用ECS完成课程任务时的心得与体验,也表达了作者对阿里云平台为学生提供这一优秀的教学资源的感谢。
|
弹性计算 Linux
云服务器学习体验
在课堂上我们了解到了ECS云服务器的相关用途及优点便捷处,为了更好的认识和掌握云服务器的用法,在教程的帮助下,我使用阿里云的云服务器创建了Linux云系统,在LAMP的环境下制作了个人简历网站,对操作系统、云、网页制作等有了更深刻的了解。
|
存储 大数据 Linux
“ecs+”学习体验
在如今的互联网云时代,有幸体验到了阿里云这一超级云服务平台。在他的强大支撑下,本科计算机的学习变得更高效,更积极,更有成效。