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

haitao_wu

当我使用Express时,我的代码是:

app.use(express.bodyParser());

我将如何获得原始请求正文

六氰化物

编辑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之前的版本,其中中间件仍与框架捆绑在一起。现代等效项是主体解析器模块,必须单独安装。

rawBodyExpress中属性曾经可用,但是从版本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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Node Express JS的请求正文中传递数组

来自分类Dev

无法在Node.js / Express中访问请求正文数据

来自分类Dev

Node.js缺少POST请求的正文

来自分类Dev

如果模板存在,如何自动处理获取请求(使用node.js + express)

来自分类Dev

如果模板存在,如何自动处理获取请求(使用node.js + express)

来自分类Dev

Node.js:我怎样才能简单地使用express4获取请求主体?

来自分类Dev

使用Node JS和Express JS的HTTPS请求缓慢?

来自分类Dev

如何在Express Node JS中获取删除请求的参数

来自分类Dev

Node.js / Express POST请求正文已解析为错误的JSON

来自分类Dev

如何从多部分表单数据中获取Node JS中间件中的请求正文?

来自分类Dev

无法使用Express从Node.js请求对象访问文件

来自分类Dev

使用node.js / express和AngularJS的CORS请求

来自分类Dev

使用Express的Node.js:如何重定向POST请求

来自分类Dev

使用node.js,GET,body-parser解析来自GET请求的正文?

来自分类Dev

如何使用node.js处理获取请求(快速)

来自分类Dev

使用Node.js执行同步获取请求

来自分类Dev

使用node.js轻松获取请求并表达

来自分类Dev

Node.js / Express.js JavaScript:获取请求来自何处

来自分类Dev

NODE JS取消请求

来自分类Dev

Node JS:Express入门

来自分类Dev

Node.js:从请求获取路径

来自分类Dev

如何获取Node.js请求类型?

来自分类Dev

Node.js https获取请求ECONNRESET

来自分类Dev

通过Express从Node.js获取数据

来自分类Dev

使用express.js在node.js中进行HTTPS POST请求

来自分类Dev

使用express.js在node.js中进行HTTPS POST请求

来自分类Dev

如何在Node.js Express框架中拦截获取请求

来自分类Dev

使用请求模块抓取Node.js

来自分类Dev

使用node.js卷曲请求

Related 相关文章

热门标签

归档