Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 请求正文有值,但我可以';我无法访问它_Node.js_Express_Mongoose - Fatal编程技术网

Node.js 请求正文有值,但我可以';我无法访问它

Node.js 请求正文有值,但我可以';我无法访问它,node.js,express,mongoose,Node.js,Express,Mongoose,我目前正在做一些从angular2前端到express后端的用户注册。除了从请求主体获取值之外,其他一切都正常工作。看看这个 usersRoute.js userRouter.route('/signup') .post(function(req, res){ console.log(req.body); mongoose.connect(url, function(err){ var user = { username: re

我目前正在做一些从angular2前端到express后端的用户注册。除了从请求主体获取值之外,其他一切都正常工作。看看这个

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上,我试图查看用户变量是否有值。事情就是这样

正如我们所看到的,用户变量没有值,但我通过req.body.name访问它。有人能帮我澄清一下吗


可选问题:这些问题困扰着我。如何摆脱它?

您可以尝试在回调外部声明
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){...
如果不起作用,您可以使用将数据带入。

问题:

这里您的请求对象的范围不同。您想在函数回调中使用请求对象

所以,您可以做的一件事是传递调用回调函数的值

解决方案: 改变这个

mongoose.connect(url,函数(err){

对此

mongoose.connect(url、函数(err、req){


希望这会有所帮助。谢谢您需要使用一些类似于库的正文解析器来完成此操作。修复程序将添加以下代码行:

var bodyParser = require('body-parser');
var urlencodedParser = bodyParser.urlencoded({ extended: false });
并将代码的前两行更改为:

userRouter.route('/signup')
.post(urlencodedParser,function(req, res){

原因是http post请求的主体不是由express提取的,因此需要另一个类似于库的主体解析器来执行该任务。

是否可以将您的console.log(req.body);替换为对象属性上的循环,如for(var p in body.req){console.log(p))};来确认req.body实际有什么属性?它看起来像是有一个单独的属性,以跨越前三行的第一对撇号之间的所有内容命名,并带有一个空值。我做了循环,它显示了所有的值。请看这个。第一个控制台日志就是循环。第二个console log用于用户变量,第三个未定义的用于回调中的结果。我认为键/值对的第一个块实际上是作为一个单独的输出块打印的——正如我所暗示的。但这并不一定很明显。在循环中放置一个计数器,如var I=0;for(var p in body.req){I++};console.log(I);这很可能会吐出1。我仍然没有定义。我也把用户放在回调之外也没有运气。我的坏消息你能尝试用这个mongoose.connect检查一下吗(url,req,function(err){不知怎的我让它工作了。之前,我附加了一个带有x-www-form-urlencoded的头。我把它改为application/json,它工作得很好。:)