我目前正在从angular2前端做一些用户注册以表达后端。除了从请求正文中获取值之外,一切正常。看看这个。
usersRoute.js
userRouter.route('/signup')
.post(function(req, res){
console.log(req.body);
mongoose.connect(url, function(err){
var user = {
username: req.body.username,
password: req.body.password,
firstname: req.body.firstname,
lastname: req.body.lastname,
gender: req.body.gender,
address: req.body.address,
contact: req.body.contact,
email: req.body.email
};
console.log(user);
users.create(user, function(err, results){
// res.redirect('http://localhost:4200/login');
//tobeChanged
console.log(results);
mongoose.disconnect();
});
});
});
在第一个console.log上,我试图查看req.body上是否有值,然后在第二个console.log上,当我试图查看 user 变量时有一些价值。这就是发生的事情。
我们可以看到, user 变量没有值,但我通过req.body。 name 访问它。有人可以帮我澄清一下吗?
可选问题:那些正在困扰我的人。如何摆脱它?
答案 0 :(得分:1)
问题:
这里您的请求对象的范围是不同的。你想在函数回调中使用请求对象。
所以你可以做的一件事就是传递调用回调的那个值。
解决方案: 改变这个
mongoose.connect(url, function(err){
到此
mongoose.connect(url, function(err,req){
希望这会有所帮助。谢谢
答案 1 :(得分:0)
您可以尝试在回调之外声明user
对象。
.post(function(req, res){
console.log(req.body);
var user = {
username: req.body.username,
password: req.body.password,
firstname: req.body.firstname,
lastname: req.body.lastname,
gender: req.body.gender,
address: req.body.address,
contact: req.body.contact,
email: req.body.email
};
mongoose.connect(url, function(err){...
如果不起作用,您可以使用bind将数据输入。
答案 2 :(得分:0)
您需要使用像body-parser这样的库来执行此操作。修复程序将添加以下代码行:
var bodyParser = require('body-parser');
var urlencodedParser = bodyParser.urlencoded({ extended: false });
并按以下方式更改代码的前两行:
userRouter.route('/signup')
.post(urlencodedParser,function(req, res){
原因是http post请求的主体不是由express提取的,因此需要像body-parser这样的另一个库来执行任务。