本文共 2794 字,大约阅读时间需要 9 分钟。
在 Express 中处理 GET 请求的表单数据非常简单,因为无需额外的解析工具。客户端提交的数据通过 req.query 接收,数据格式为 JSON。
const express = require('express');let server = express();server.listen(8080);// 获取 GET 请求的数据server.get('/', (req, res) => { console.log(req.query);}); 对于 POST 请求,Express 需要使用 body-parser 插件来解析客户端提交的表单数据。req.body 提供了获取 POST 数据的接口。
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);}); 当需要上传文件时,可以使用 multer 插件来解析 multipart/form-data 格式的数据。以下是一个完整的文件上传示例:
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('成功'); } });}); 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 你可以编写自己的中间件,通过 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);}); 如果需要自定义解析 POST 请求体数据的中间件,可以按照以下步骤实现:
npm install querystring
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/