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代码:
$scope.formdata
对象中。是否有一种方法可以在express后端访问此对象app.get('/success', function(req, res){
//console.log(req.body);
res.json(req.user);
}))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我建议你仔细观察