请求正文有价值但我无法访问它

时间:2016-12-16 04:27:38

标签: node.js express mongoose

我目前正在从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 变量时有一些价值。这就是发生的事情。

enter image description here

我们可以看到, user 变量没有值,但我通过req.body。 name 访问它。有人可以帮我澄清一下吗?

可选问题:那些正在困扰我的人。如何摆脱它?

3 个答案:

答案 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这样的另一个库来执行任务。