博客
关于我
express中的get post use处理,链式操作,封装中间件
阅读量:402 次
发布时间:2019-03-05

本文共 2794 字,大约阅读时间需要 9 分钟。

Express 开发指南:从 GET 到 POST 的数据处理与文件上传

1. 获取 GET 请求的数据

在 Express 中处理 GET 请求的表单数据非常简单,因为无需额外的解析工具。客户端提交的数据通过 req.query 接收,数据格式为 JSON。

客户端代码示例

    
用户名:
密码:

服务端代码示例

const express = require('express');let server = express();server.listen(8080);// 获取 GET 请求的数据server.get('/', (req, res) => {    console.log(req.query);});

2. 处理 POST 请求的数据

对于 POST 请求,Express 需要使用 body-parser 插件来解析客户端提交的表单数据。req.body 提供了获取 POST 数据的接口。

安装并配置 body-parser

const express = require('express');const bodyParser = require('body-parser');let server = express();server.listen(8080);// 配置 body-parser 解析 POST 数据server.use(bodyParser.urlencoded({ extended: true }));// 处理 POST 请求server.post('/', (req, res) => {    console.log(req.body);});

POST 请求的常见用途

  • 上传数据
  • 解析上传文件

3. 处理文件上传

当需要上传文件时,可以使用 multer 插件来解析 multipart/form-data 格式的数据。以下是一个完整的文件上传示例:

安装并配置 multer

const express = require('express');const multer = require('multer');const fs = require('fs');const path = require('path');let server = express();server.listen(8080);// 定义上传文件的路径let multerObj = multer({ dest: './www/upload/' });// 注册 multer 中间件server.use(multerObj.any());// 处理 POST 请求server.post('/', (req, res) => {    console.log(req.files[0]);        // 重命名上传文件    let newName = req.files[0].originalname;    fs.rename(req.files[0].path, newName, (err) => {        if (err) {            console.log('文件重命名失败');            res.send('失败');        } else {            console.log('文件重命名成功');            res.send('成功');        }    });});

客户端代码示例

    
上传文件:

4. Express 的链式操作

Express 的中间件处理支持链式调用,next() 方法用于调用下一个中间件或最终的响应函数。

链式操作示例

const express = require('express');let server = express();server.listen(8080);// 链式调用 next() 函数server.use('/', (req, res, next) => {    console.log('a');    next();});server.use('/', (req, res, next) => {    console.log('b');});// 输出:a, b

5. 自定义中间件

你可以编写自己的中间件,通过 next() 调用链式函数,并添加自定义属性到请求对象上。

自定义中间件示例

const express = require('express');let server = express();server.listen(8080);// 响应所有请求server.use((req, res, next) => {    req.body = 12;    req.a = 'dd';    next();});// 处理根目录请求server.use('/', (req, res) => {    console.log(req.body);    console.log(req.a);});

6. 实现自定义的 body-parser

如果需要自定义解析 POST 请求体数据的中间件,可以按照以下步骤实现:

实现步骤

  • 安装所需依赖项:
  • npm install querystring
    1. 编写中间件代码:
    2. const express = require('express');const querystring = require('querystring');let server = express();server.listen(8080);// 实现自定义中间件server.use((req, res, next) => {    let str = '';        // 收集数据    req.on('data', (data) => {        str += data;    });        // 解析数据    req.on('end', () => {        req.body = querystring.parse(str);        next();    });});// 处理根目录请求server.use('/', (req, res) => {    console.log(req.body);});

      通过以上方法,你可以根据具体需求定制 Express 应用的数据处理逻辑。

    转载地址:http://gckzz.baihongyu.com/

    你可能感兴趣的文章
    pip 升级报错AttributeError: ‘NoneType’ object has no attribute ‘bytes’
    查看>>
    pip 安装opencv-python卡死
    查看>>
    pip 安装出现异常
    查看>>
    Pip 安装失败:需要 SSL
    查看>>
    Pip 安装挂起
    查看>>
    pip 或 pip3 为 Python 3 安装包?
    查看>>
    pip 文件损坏导致 pip无法使用 报错 ImportError: cannot import name 'main' from 'pip._int
    查看>>
    pip 无法从 requirements.txt 安装软件包
    查看>>
    pip/pip3更换国内源
    查看>>
    pip3 install PyQt5 --user 失败
    查看>>
    pip3命令全解析:Python3包管理工具的详细使用指南
    查看>>
    pip3安装命令重复创建文件‘/tmp/pip-install-xxxxx/package‘失败
    查看>>
    PIPE 接口信号列表
    查看>>
    pipeline配置与管理Job企业级实战
    查看>>
    pipeline项目配置实战
    查看>>
    Pipenv 与 Conda?
    查看>>
    QVGA/HVGA/WVGA/FWVGA分辨率屏含义及大小//Android虚拟机分辨率
    查看>>
    pipreqs : 无法将“pipreqs”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径 正确,然后再试一次。
    查看>>
    pipy国内镜像的网址
    查看>>
    quiver绘制python语言
    查看>>