Sailsjs中间件解析res.body

时间:2015-09-01 05:57:36

标签: node.js express sails.js

我是JS新手并开始使用sails框架。我需要在中间件中解析http res主体以将作业放入芹菜队列中。我已经尝试过使用skipper-根据文档 - 但我总是得到res.body的值为undefined。当我记录响应时 - 我只得到关于相同的元信息。

以下是我正在尝试的中间件代码 - 如果有人请让我知道我做错了什么?

order: [
  'startRequestTimer',
  'cookieParser',
  'session',
  'requestLogger',
  'bodyParser',
  'handleBodyParserError',
  'compress',
  'methodOverride',
  'poweredBy',
  '$custom',
  'router',
  'www',
  'favicon',
  '404',
  '500'
],

requestLogger: function (req, res, next) {
    var start = (new Date().getTime());
    res.on('finish', function(){
       console.log(res.body)
    });
    return next();
},

 bodyParser: require('skipper')
PS:我没有挂在船长身上 - 只要我能够解析结果的身体就行了。谢谢!

2 个答案:

答案 0 :(得分:2)

Skipper用于解析请求正文。在Sails(以及所有基于Express的应用程序)中传递的response对象不包含实际响应,它只是用于形成响应的方法的集合。一旦用res.send之类的东西触发响应,就没有简单的方法来拦截它。相反,您可以使用Sails custom response,并在实际发送输出之前对自定义响应中的数据执行任何操作。这里的最佳做法是使用res.ok(“ok”响应)。所以在您的Sails控制器中,您可能会在哪里

res.send(someData)

相反,做

res.ok(someData)

然后在您的api/responses/ok.js文件中,将作业添加到您的队列或您需要做的任何事情。

另外,将config/http.js文件放回原来的方式,直到你真的需要弄乱中间件或正文解析器; - )

答案 1 :(得分:1)

没有res.body之类的东西。它的req.body

http://sailsjs.org/documentation/reference/request-req/req-body