无法读取 Nodejs 中未定义的属性

Posted

技术标签:

【中文标题】无法读取 Nodejs 中未定义的属性【英文标题】:Cannot read properties of undefined in Nodejs 【发布时间】:2021-12-23 01:32:21 【问题描述】:

我正在尝试在 nodejs、express 和 mysql 中使用 MVC 在不使用 JWT 的情况下进行示例注册,因此当我运行代码时出现错误:

TypeError: Cannot read properties of undefined (reading 'firstName') at exports.register

这是我的代码:

AuthController

const AuthModel = require('../models/Auth')

// Create and Save a new User
exports.register = (req, res) => 
  // Validate request
  if (!req.body) 
    res.status(400).send(
      message: "Content can not be empty!"
    );
  

  // Create user
  const user = new AuthModel(
    firstName: req.body.firstName,
    lastName: req.body.lastName,
    email: req.body.email,
    password: req.body.password
  );

  // Save user in the database
  AuthModel.createUser(user, (err, data) => 
    if (err)
      res.status(500).send(
        message:
          err.message || "Some error occurred while registring."
      );
    else res.send(data);
  );
;

AuthModel

const AuthModel = function(table)
   
    this.firstName = table.firstName;
    this.lastName = table.lastName;
    this.email = table.email;
    this.password = table.password;



AuthModel.createUser = ( newUser, result ) =>

        db.query("INSERT INTO users SET ?", newUser, (err, res) => 
            if (err) 
              console.log("error: ", err);
              result(err, null);
              return;
            
        
            console.log("User are registed: ",  id: res.insertId, ...newUser );
            result(null,  id: res.insertId, ...newUser );
          );
        ;

【问题讨论】:

您应该尝试使用 console.log(req.body) 进行调试,看看缺少什么。并且您仅检查 req.body 是否存在,而不是检查它是否包含具有名字,电子邮件,...键的对象 我检查了 req.body 并且未定义 【参考方案1】:

如果正文未定义,则在您的exports.register 中,您是.send()。这并不意味着其余代码不会被执行。

替换:

res.status(400).send(
   message: "Content can not be empty!"
);

通过

return res.status(400).send(
   message: "Content can not be empty!"
);

【讨论】:

是的,因为它无法读取 req.body 的属性 这就是我的意思。你的代码做了它应该做的,你只是忘记通过添加一个返回来结束它的执行。这并不能解释也不能解决为什么你的身体是不确定的。【参考方案2】:

在我看来,req.body 好像是未定义的。我认为您可能需要像 body-parser 这样的东西,它已从版本 4 开始添加到 Express 的核心中。

尝试将此中间件添加到您的入口点:app.use(express.json());

在此处查看更多信息:http://expressjs.com/en/api.html#express.json

【讨论】:

谢谢这是正确的答案,我只是在错误的行中添加了它

以上是关于无法读取 Nodejs 中未定义的属性的主要内容,如果未能解决你的问题,请参考以下文章

无法读取主干中未定义的属性“长度”

TypeError:无法读取反应js中未定义的属性'fn'

如何修复'TypeError:无法读取 Javascript 中未定义的属性'标题'

无法读取电子 javascript 中未定义的属性“on”

TypeError:无法读取reactjs中未定义的属性“长度”

骨干无法读取骨干视图中未定义错误的属性“属性”