使用body解析器和dicer进行分段上传和快速js 4

时间:2015-06-10 03:40:43

标签: node.js express

我使用快速4与身体解析器如此

var bodyParser = require('body-parser');
...
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true
}));

当我添加dicer时,它就像身体解析器停止工作一样。我在req.paramsreq.bodyreq.query中不再拥有任何邮件参数。

有没有办法手动使用身体解析器? body解析器是否检查多部分表单数据并且什么也不做......假设另一个lib将处理它?<​​/ p>

此外,我觉得我应该注意,我使用dicer解析多部分表单数据是有原因的,如果可能的话,我不想使用busboy或multer或xyz。

1 个答案:

答案 0 :(得分:0)

回答你的问题“有没有办法手动使用身体解析器?” 答案是肯定的,这是推荐使用它的方式。参考body-parser documentation

  

表达特定路线

     

此示例演示了如何将body解析器专门添加到需要它们的路由中。一般来说,这是使用body-body的最佳推荐方法。

(我添加了一些分号因为他们会让我晚上起来)

var express = require('express');
var bodyParser = require('body-parser');

var app = express();

// create application/json parser
var jsonParser = bodyParser.json();

// create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({ extended: false });

// POST /login gets urlencoded bodies
app.post('/login', urlencodedParser, function (req, res) {
  if (!req.body) return res.sendStatus(400);
  res.send('welcome, ' + req.body.username);
})

// POST /api/users gets JSON bodies
app.post('/api/users', jsonParser, function (req, res) {
  if (!req.body) return res.sendStatus(400);
  // create user in req.body
})

因此,根据您需要身体解析器的路径,您可以使用一些自定义中间件来实现它。现在,我还没有测试过这个,但我假设您也可以像其他快速中间件一样实现它:

// URL encoded bodies
app.use('/api/url/encoded/endpoint', bodyParser.urlencoded({ extended: false }));
// JSON encoded bodies
app.use('/api/json/encoded/endpoint', bodyParser.json());

与上述端点匹配的任何路由,例如

app.use('/api/url/encoded/endpoint/test', function (req, res) { ... });

将使用适当的中间件进行解析,只要它们低于代码中的中间件声明即可。

为了尝试回答你的整个问题,我会说尝试不使用全局解析器是安全的。保持你的解析器api端点特定,你不应该遇到任何问题。

修改

所以你的问题有点不清楚。您想将body解析器用于multipart / form-data? “身体解析器由于其复杂且通常较大的性质而无法处理多部分体。”同样,我没有尝试过,但如果是这样的话,也许你可以试试bodyParser.raw({ type: ... })函数。如果没有,那么您需要在自定义中间件功能中使用dicer,在其中检查正确的内容类型。