Javascript Express req.body为空。这是最好的方法吗?

Javascript Express req.body为空。这是最好的方法吗?,javascript,angularjs,node.js,mongodb,express,Javascript,Angularjs,Node.js,Mongodb,Express,我是一个新手,尝试实现一个基本的登录功能,但是我对传递数据有点困惑。我有几个地方让我感到困惑 我将输入值存储在发布到/login的$scope.formdata对象中。是否有一种方法可以在express后端访问此对象 我不太清楚为什么在这段代码中req.body没有定义 app.get('/success', function(req, res){ //console.log(req.body); res.json(req.user); })) 以下是express后端和angular代码:

我是一个新手,尝试实现一个基本的登录功能,但是我对传递数据有点困惑。我有几个地方让我感到困惑

  • 我将输入值存储在发布到/login的
    $scope.formdata
    对象中。是否有一种方法可以在express后端访问此对象

  • 我不太清楚为什么在这段代码中req.body没有定义

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

  • 以下是express后端和angular代码:

    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');
    });
    
    })


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

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

    例如:

    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);
    })
    

    文档:

    您应该使用主体解析中间件,否则您的
    req.body
    对象将是
    未定义的

    例如:

    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);
    })
    

    文档:

    您应该使用主体解析中间件,否则您的
    req.body
    对象将是
    未定义的

    例如:

    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);
    })
    

    文档:

    您应该使用主体解析中间件,否则您的
    req.body
    对象将是
    未定义的

    例如:

    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);
    })
    

    文档:

    除上述答案外,passport不会将
    请求主体
    对象传递到
    /success
    路径。此路由将在成功身份验证时被调用,它不会将原始请求主体传递给它。从passport开始,调用此函数后,您将可以访问
    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);
      });
    

    除上述答案外,passport不会将
    req.body
    对象传递给
    /success
    路由。此路由将在成功身份验证时被调用,它不会将原始请求主体传递给它。从passport开始,调用此函数后,您将可以访问
    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);
      });
    

    除上述答案外,passport不会将
    req.body
    对象传递给
    /success
    路由。此路由将在成功身份验证时被调用,它不会将原始请求主体传递给它。从passport开始,调用此函数后,您将可以访问
    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);
      });
    

    除上述答案外,passport不会将
    req.body
    对象传递给
    /success
    路由。此路由将在成功身份验证时被调用,它不会将原始请求主体传递给它。从passport开始,调用此函数后,您将可以访问
    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);
      });
    


    如果我们的$http请求是post,那么您应该在app.post而不是app.gett中查找req.body请求对象应该从post/login状态传递到/success get状态,对吗?抱歉,我无法理解。您能提供解决方案吗?我试了你的建议。它必须是一个get方法。如果我们的$http请求是post,那么您应该在app.post而不是app.gett中查找req.body请求对象应该从post/login状态传递到/success-get状态,对吗?很抱歉,我无法理解。您能提供解决方案吗?我试了你的建议。它必须是一个get方法。如果我们的$http请求是post,那么您应该在app.post而不是app.gett中查找req.body请求对象应该从post/login状态传递到/success-get状态,对吗?很抱歉,我无法理解。您能提供解决方案吗?我试了你的建议。它必须是一个get方法。如果我们的$http请求是post,那么您应该在app.post而不是app.gett中查找req.body请求对象应该从post/login状态传递到/success-get状态,对吗?很抱歉,我无法理解。您能提供解决方案吗?我试了你的建议。它必须是get方法。它仍然为空。req.body为空,但res包含用户对象,但如果我使用res.user,则未定义。这是为什么?它还是空的。req.body为空,但res包含用户对象,但如果我使用res.user,则未定义。这是为什么?它还是空的。req.body为空,但res包含用户对象,但如果我使用res.user,则未定义。这是为什么?它还是空的。req.body为空,但res包含用户对象,但如果我使用res.user,则未定义。这是为什么?好的,谢谢你们,从角度控制重定向是否可能/最佳实践?这难道不是实现这一点的最好方法吗?这样新页面就可以包含hello,username。@TarangHirani假设反序列化的用户对象包含该信息,您可以在successs重定向自身上执行“user mr.X”。记住,在调用/success时,您可以访问
    req.user
    对象来获取此信息。或者,您可能应该将其与express session中间件结合使用,以便在用户通过身份验证后在整个应用程序中保留此信息。好的。谢谢你。我对/success url中req和res对象之间的区别有点困惑。他们从哪里来?你能给我一些见解吗?为什么在这种情况下它们会有所不同?@TarangHirani我建议你仔细观察