【问题标题】:How to check if a certain property is undefined in NodeJS如何检查 NodeJS 中是否未定义某个属性
【发布时间】:2020-05-21 07:32:17
【问题描述】:

我正在使用 NodeJS 和 PostgreSQL 构建自己的服务器。对于特定的 API,我执行一个查询,我需要知道结果的某个属性是否未定义。我做的是这样的:

pool.query('SELECT id, administrator FROM public."user" WHERE uid = \'' + admin + '\'', (error, results) => {
    if (error) {
       throw error
    }
    if (results.rows[0].administrator !== undefined) {
       // do my stuff
    }
});

但它不起作用,它返回我这个:

if (results.rows[0].administrator !== undefined) {
                    ^

TypeError: Cannot read property 'administrator' of undefined
at /home/mauro/secure-door-server/api/controllers/secureDoorController.js:27:25
at Query.<anonymous> (/home/mauro/secure-door-server/node_modules/pg-pool/index.js:348:18)
at Query.handleReadyForQuery (/home/mauro/secure-door-server/node_modules/pg/lib/query.js:128:10)
at Connection.<anonymous> (/home/mauro/secure-door-server/node_modules/pg/lib/client.js:244:19)
at Connection.emit (events.js:223:5)
at Socket.<anonymous> (/home/mauro/secure-door-server/node_modules/pg/lib/connection.js:128:12)
at Socket.emit (events.js:223:5)
at addChunk (_stream_readable.js:309:12)
at readableAddChunk (_stream_readable.js:290:11)
at Socket.Readable.push (_stream_readable.js:224:10)
[nodemon] app crashed - waiting for file changes before starting...

如何查看此类属性?

【问题讨论】:

  • results.rows[0]undefined,而不是 results.rows[0].administrator。正如错误所说,您正在尝试使用 .administrator 属性 来自值 undefined
  • 对 SQL 注入攻击持开放态度。使用适当的参数化查询!
  • 什么意思?

标签: javascript node.js postgresql api server


【解决方案1】:

你可以这样检查

if (results.rows && results.rows[0].administrator) {}

为了更好的结果,你可以这样检查

if (results && results.rows && results.rows.length && results.rows[0].administrator) {
   //Your Code
}

【讨论】:

  • 是的,谢谢!此解决方案似乎工作正常
  • @spike32 非常欢迎,如果解决方案解决了你的问题,你应该标记答案是正确的
【解决方案2】:

您所做的是正确的,您只需要检查结果中是否有行,这就是为什么 results.rows[0] 在您的代码中变得未定义的原因。像

if (results &amp;&amp; results.rows &amp;&amp; results.rows[0] &amp;&amp; results.rows[0].administrator !== undefined)

会正常工作。

【讨论】:

  • 最佳解决方案之一!
【解决方案3】:

你可以使用“hasOwnPropety”

if (results.rows && results.rows[0].hasOwnProperty('administrator') {}

如果属性存在,它将返回 true。

【讨论】:

  • 非常感谢,这个解决方案也很有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 2012-04-16
  • 1970-01-01
  • 2015-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多