我是新手来表达和尝试实现基本的登录功能,但我对传递数据感到困惑。我有几个方面似乎让我感到困惑。
我将输入值存储在发布到/ login的$scope.formdata
对象中。有没有办法可以在我的快递后端访问这个对象。
我不太清楚为什么在这段代码中未定义req.body。
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');
});
};
$scope.login = function(){
$http.post('/login', $scope.formdata)
.success(function (data){
console.log(data);
})
.error(function (data){
console.log(data);
});
}
成功登录后,我只想重定向到新页面并显示“hello,username”
答案 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);
})