Express req.body是空的。这是最好的方式吗?

时间:2015-08-30 06:30:30

标签: javascript angularjs node.js mongodb express

我是新手来表达和尝试实现基本的登录功能,但我对传递数据感到困惑。我有几个方面似乎让我感到困惑。

  1. 我将输入值存储在发布到/ login的$scope.formdata对象中。有没有办法可以在我的快递后端访问这个对象。

  2. 我不太清楚为什么在这段代码中未定义req.body。

    app.get('/success', function(req, res){
    //console.log(req.body);
    res.json(req.user);
    

    });

  3. 以下是快速后端和角度代码:

    module.exports = function(app, passport){
    
    //index page - main login page
    app.get('/login', function(req, res){
        res.render('index.ejs');
    });
    
    app.post('/login', passport.authenticate('local-login', {
        successRedirect: '/success',
        failureRedirect: '/failure',
    }));
    
    
    app.get('/success', function(req, res){
        //console.log(req.body);
        res.json(req.user);
    });
    
    app.get('/failure', function(req, res){
        res.send('Failed');
    });
    

    };

        $scope.login = function(){
        $http.post('/login', $scope.formdata)
        .success(function (data){
            console.log(data);
        })
        .error(function (data){
            console.log(data);
        });
    }
    

    成功登录后,我只想重定向到新页面并显示“hello,username”

2 个答案:

答案 0 :(得分:2)

除上述答案外,护照不会将req.body对象传递到/success路线。成功验证后将调用此路由,它不会将原始请求正文传递给它。从护照的documentation开始,在调用此功能后,您将可以访问req.user对象,但不能访问您最初发布的req.body。也没有理由:此时,你应该在req.user

中有一个反序列化的用户对象
app.post('/login',
  passport.authenticate('local'),
  function(req, res) {
    // If this function gets called, authentication was successful.
    // `req.user` contains the authenticated user.
    res.redirect('/users/' + req.user.username);
  });

答案 1 :(得分:1)

您应该使用正文解析中间件,否则您的req.body对象将为undefined

示例:

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

app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
app.use(multer()); // for parsing multipart/form-data

app.post('/', function (req, res) {
  console.log(req.body);
  res.json(req.body);
})

文档:http://expressjs.com/api.html#req.body