我是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:我没有挂在船长身上 - 只要我能够解析结果的身体就行了。谢谢!
答案 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