博客
关于我
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/

    你可能感兴趣的文章
    Objective-C实现多尺度MSR算法(附完整源码)
    查看>>
    Objective-C实现多种方法求解定积分(附完整源码)
    查看>>
    Objective-C实现多组输入(附完整源码)
    查看>>
    Objective-C实现多行输入(附完整源码)
    查看>>
    Objective-C实现多项式函数在某个点的评估算法(附完整源码)
    查看>>
    Objective-C实现多项式哈希算法(附完整源码)
    查看>>
    Objective-C实现大位数乘法(附完整源码)
    查看>>
    Objective-C实现大小端数转换(附完整源码)
    查看>>
    Objective-C实现大根堆(附完整源码)
    查看>>
    Objective-C实现奇偶检验码(附完整源码)
    查看>>
    Objective-C实现奇偶转置排序算法(附完整源码)
    查看>>
    Objective-C实现奇异值分解SVD(附完整源码)
    查看>>
    Objective-C实现奎因-麦克拉斯基算法(附完整源码)
    查看>>
    Objective-C实现子集总和算法(附完整源码)
    查看>>
    Objective-C实现子集数的总和等于给定的数算法(附完整源码)
    查看>>
    Objective-C实现字符串autocomplete using trie(使用 trie 自动完成)算法(附完整源码)
    查看>>
    Objective-C实现字符串boyer moore search博耶摩尔搜索算法(附完整源码)
    查看>>
    Objective-C实现字符串IP地址转DWORD地址(附完整源码)
    查看>>
    Objective-C实现字符串jaro winkler算法(附完整源码)
    查看>>
    Objective-C实现字符串levenshtein distance编辑距离算法(附完整源码)
    查看>>