max*_*ijb 3 post node.js express sails.js
我正在开发一个sails.js(基于express的node.js框架)应用程序,这很棒但是]我无法解决这个细节......
我需要从 Internet Explorer 8 和 9 跨域发送 POST 请求。为此,我被迫使用 xDomainRequest 对象,这不允许设置内容类型标头。
因此,当请求到达服务器时,内容类型是“text/plain”,它不会触发 bodyParser express 中间件,所以我的 req.body 是一个空对象,我看不到我正在发送的有效负载从客户端。
为此,我尝试了两件事但没有运气:
首先,我想在我的第一个中间件中为请求设置一个标头,这当然不可用:
req.set("Content-type", "Apli.....
Run Code Online (Sandbox Code Playgroud)
然后,我创建了一个监听 req.on('data') 的中间件,如下所示:
var data = "";
req.on('data', function(chunk){
data += chunk;
});
req.on('end', function(){
req.rawBody = data;
next();
});
Run Code Online (Sandbox Code Playgroud)
但是数据事件永远不会触发!
有谁知道我如何访问我的原始负载,以便我自己解析它。谢谢!
小智 7
对于最新版本的 Sails,不推荐使用 express。我需要使用特定的解析器从 Stripe API 获取原始数据。这是我的代码,也许它会帮助某人:
bodyParser: function(req, res, next) {
var skipper = require('skipper')();
var rawParser = require("body-parser").raw({type: "*/*"});
// Create and return the middleware function
return function(req, res, next) {
sails.log.debug(req.headers);
if (req.headers && req.headers['stripe-signature']) {
sails.log.info('request using raw parser middleware');
return rawParser(req, res, next);
}
// Otherwise use Skipper to parse the body
sails.log.info('request using skipper middleware');
return skipper(req, res, next);
};
},
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4314 次 |
| 最近记录: |