Node.JS通过护照保护Express应用程序的POST请求

时间:2014-09-23 20:18:28

标签: node.js http express request passport.js

机制:

我正在向我的API发送此POST请求:

request.post('http://localhost:9876/api/alerts',{body: "test"}, function (err, res, body) {
        if (err) {
            self.emit('log','ERROR : API error - '+err);
        }
        self.emit('log','RESPONSE - '+res.statusCode);
    });

在服务器端,我有:

app.post('/api/alerts',function(req,res){
    console.log(req);
    res.status(200).send('OK');
});

进行通信并返回200状态。但在服务器端,我看不到我的请求的遗体。

完整的' req'日志可在此处获取:https://gist.github.com/xShirase/0f9de0048e5cfa40a98c,最相关的部分是:

body: {},

我想知道它是否来自我用来保护其余路由的Passport中间件,或者我是否只是破坏了客户端请求......

我在客户端尝试了很多不同的请求格式,没有任何效果,而且我对Passport的经验很少,所以请告诉我问题的来源。

1 个答案:

答案 0 :(得分:1)

除非您在路由/中间件链中早些时候有(自定义)中间件,否则会执行以下操作:

app.use(function(req, res, next) {
  var buffer = '';
  req.setEncoding('utf8');
  req.on('data', function(d) {
    buffer += d;
  }).on('end', function() {
    req.body = buffer;
    next();
  });
});

那么您可能不应该期望填充req.body,因为常见的主体解析模块期望Content-Typeapplication/json或{{1}中的一个application/x-www-form-urlencoded }}。您的multipart/form-data似乎没有设置任何这些,这实际上是正确的,因为它只是自由格式数据,但这意味着没有中间件正在读取请求数据。