无法读取 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:无法读取 Javascript 中未定义的属性'标题'