var query = [], name = 'name';
if (body.displayName !== req.user.displayName) {
query.push({
displayName: name
});
}
这很有效,但我遇到了req.user.displayName === undefined
。
直观地说,似乎undefined
也不等于body.displayName
,但当然会引发错误:
“无法读取未定义的属性”
无论如何有条件地检查值是undefined
并且在同一if语句中也不等于body.displayName
,或者是将其嵌套在另一个if语句中的唯一方法:< / p>
if (req.user.displayName !== undefined) { }
答案 0 :(得分:1)
该错误不能来自req.user.displayName
undefined
。它来自于尝试读取未定义的属性,这意味着罪魁祸首是body
,req
或req.user
是undefined
。
这是来自node.js的成绩单:
> body = {displayName: "foo"}
{ displayName: 'foo' }
> req = {user: {displayName: undefined}}
{ user: { displayName: undefined } }
> req.user
{ displayName: undefined }
> req.user.displayName
undefined
> body.displayName !== req.user.displayName
true
完全没问题,即使req.user.displayName
是undefined
。
您无需更改if
测试;你需要追踪其中一个其他对象为undefined
。
答案 1 :(得分:1)
所以弄清楚什么是未定义的
console.log(req);
console.log(req.user);
我假设错误是用户未设置。如果这可能是真的,那么你就没有问题。如果它应该有一个用户而不是你有一个bug。
但是基本检查会使用真正的检查来确保对象在那里。取决于未定义的内容,它可以是以下任何一种。
if (req && req.user && req.user.displayName !== body.displayName)
或
if (req.user && req.user.displayName !== body.displayName)
或如果body
是undefined
,您需要以另一种方式进行检查。