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

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


相关文章
|
2月前
|
机器学习/深度学习 JavaScript Cloud Native
Node.js作为一种快速、可扩展的服务器端运行时环境
Node.js作为一种快速、可扩展的服务器端运行时环境
62 8
|
3月前
|
Web App开发 JSON JavaScript
Node.js 中的中间件机制与 Express 应用
Node.js 中的中间件机制与 Express 应用
|
3月前
|
JavaScript
使用Node.js创建一个简单的Web服务器
使用Node.js创建一个简单的Web服务器
|
3月前
|
缓存 负载均衡 JavaScript
构建高效后端服务:Node.js与Express框架实践
在数字化时代的浪潮中,后端服务的重要性不言而喻。本文将通过深入浅出的方式介绍如何利用Node.js及其强大的Express框架来搭建一个高效的后端服务。我们将从零开始,逐步深入,不仅涉及基础的代码编写,更会探讨如何优化性能和处理高并发场景。无论你是后端新手还是希望提高现有技能的开发者,这篇文章都将为你提供宝贵的知识和启示。
|
3月前
|
JavaScript
使用node.js搭建一个express后端服务器
Express 是 Node.js 的一个库,用于搭建后端服务器。本文将指导你从零开始构建一个简易的 Express 服务器,包括项目初始化、代码编写、服务启动与项目结构优化。通过创建 handler 和 router 文件夹分离路由和处理逻辑,使项目更清晰易维护。最后,通过 Postman 测试确保服务正常运行。
168 1
|
3月前
|
Web App开发 JavaScript 前端开发
探索后端开发:Node.js与Express的完美结合
【10月更文挑战第33天】本文将带领读者深入了解Node.js和Express的强强联手,通过实际案例揭示它们如何简化后端开发流程,提升应用性能。我们将一起探索这两个技术的核心概念、优势以及它们如何共同作用于现代Web开发中。准备好,让我们一起开启这场技术之旅!
93 0
|
3月前
|
Web App开发 JavaScript 前端开发
构建高效后端服务:Node.js与Express框架的实践
【10月更文挑战第33天】在数字化时代的浪潮中,后端服务的效率和可靠性成为企业竞争的关键。本文将深入探讨如何利用Node.js和Express框架构建高效且易于维护的后端服务。通过实践案例和代码示例,我们将揭示这一组合如何简化开发流程、优化性能,并提升用户体验。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
4天前
|
存储 机器学习/深度学习 人工智能
2025年阿里云GPU服务器租用价格、选型策略与应用场景详解
随着AI与高性能计算需求的增长,阿里云提供了多种GPU实例,如NVIDIA V100、A10、T4等,适配不同场景。2025年重点实例中,V100实例GN6v单月3830元起,适合大规模训练;A10实例GN7i单月3213.99元起,适用于混合负载。计费模式有按量付费和包年包月,后者成本更低。针对AI训练、图形渲染及轻量级推理等场景,推荐不同配置以优化成本和性能。阿里云还提供抢占式实例、ESSD云盘等资源优化策略,支持eRDMA网络加速和倚天ARM架构,助力企业在2025年实现智能计算的效率与成本最优平衡。 (该简介为原文内容的高度概括,符合要求的字符限制。)
|
6天前
|
存储 弹性计算 人工智能
2025年阿里云企业云服务器ECS选购与配置全攻略
本文介绍了阿里云服务器的核心配置选择方法论,涵盖算力需求分析、网络与存储设计、地域部署策略三大维度。针对不同业务场景,如初创企业官网和AI模型训练平台,提供了具体配置方案。同时,详细讲解了购买操作指南及长期运维优化建议,帮助用户快速实现业务上云并确保高效运行。访问阿里云官方资源聚合平台可获取更多最新产品动态和技术支持。
|
8天前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
Node.js 是一种高效的 JavaScript 运行环境,基于 Chrome V8 引擎,支持在服务器端运行 JavaScript 代码。本文介绍如何在阿里云上一键部署 Node.js 环境,无需繁琐配置,轻松上手。前提条件包括 ECS 实例运行中且操作系统为 CentOS、Ubuntu 等。功能特点为一键安装和稳定性好,支持常用 LTS 版本。安装步骤简单:登录阿里云控制台,选择扩展程序管理页面,安装 Node.js 扩展,选择实例和版本,等待创建完成并验证安装成功。通过阿里云的公共扩展,初学者和经验丰富的开发者都能快速进入开发状态,开启高效开发之旅。

热门文章

最新文章

  • 1
    当面试官再问我JS闭包时,我能答出来的都在这里了。
    49
  • 2
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    29
  • 3
    Node.js 中实现多任务下载的并发控制策略
    34
  • 4
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    26
  • 5
    【JavaScript】深入理解 let、var 和 const
    49
  • 6
    【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
    47
  • 7
    【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
    57
  • 8
    【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
    57
  • 9
    如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
    72
  • 10
    【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
    57