栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Node.js-使用Express获取原始请求正文

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Node.js-使用Express获取原始请求正文

编辑2: 主体解析器模块的1.15.2版引入了原始模式,该模式将主体作为Buffer返回。默认情况下,它还会自动处理deflate和gzip解压缩。用法示例:

var bodyParser = require('body-parser');app.use(bodyParser.raw(options));app.get(path, function(req, res) {  // req.body is a Buffer object});

默认情况下,该

options
对象具有以下默认选项:

var options = {  inflate: true,  limit: '100kb',  type: 'application/octet-stream'};

如果您希望原始解析器解析以外的其他MIME类型

application/octet-stream
,则需要在此处进行更改。它还将支持通配符匹配,例如
*application


注意: 以下答案适用于Express
4之前的版本,其中中间件仍与框架捆绑在一起。现代等效项是主体解析器模块,必须单独安装。

rawBody
Express中的属性曾经可用,但是从1.5.1版开始就删除了。要获取原始请求主体,必须在使用bodyParser之前放入一些中间件。您还可以在此处阅读有关GitHub的讨论。

app.use(function(req, res, next) {  req.rawBody = '';  req.setEncoding('utf8');  req.on('data', function(chunk) {     req.rawBody += chunk;  });  req.on('end', function() {    next();  });});app.use(express.bodyParser());

该中间件将从实际数据流中读取数据,并将其存储在

rawBody
请求的属性中。然后,您可以像这样访问原始主体:

app.post('/', function(req, res) {  // do something with req.rawBody  // use req.body for the parsed body});

编辑:
似乎此方法和bodyParser拒绝共存,因为一个方法将在另一个方法之前消耗请求流,从而导致第二个方法永远不会触发

end
,从而永远不会调用
next()
,并挂起您的应用程序。

最简单的解决方案很可能是修改bodyParser的源,您可以在Connect的JSON解析器的第57行中找到该源。这就是修改后的版本。

var buf = '';req.setEncoding('utf8');req.on('data', function(chunk){ buf += chunk });req.on('end', function() {  req.rawBody = buf;  var first = buf.trim()[0];  ...});

您将在以下位置找到文件:

/node_modules/express/node_modules/connect/lib/middleware/json.js



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/401516.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号