Javascript 如何检查NodeJS中是否未定义某个属性

Javascript 如何检查NodeJS中是否未定义某个属性,javascript,node.js,postgresql,api,server,Javascript,Node.js,Postgresql,Api,Server,我正在用NodeJS和PostgreSQL构建自己的服务器。对于特定的API,我执行一个查询,我需要知道结果的某个属性是否未定义。我所做的是: pool.query('SELECT id, administrator FROM public."user" WHERE uid = \'' + admin + '\'', (error, results) => { if (error) { throw error } if (results.rows[0]

我正在用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...
if(results.rows[0].administrator!==未定义){
^
TypeError:无法读取未定义的属性“administrator”
at/home/mauro/secure door server/api/controllers/secureDoorController.js:27:25
在查询时。(/home/mauro/secure door server/node_modules/pg pool/index.js:348:18)
位于Query.handleReadyForQuery(/home/mauro/secure door server/node_modules/pg/lib/Query.js:128:10)
正在连接。(/home/mauro/secure door server/node_modules/pg/lib/client.js:244:19)
在Connection.emit(events.js:223:5)
在插座上。(/home/mauro/secure door server/node_modules/pg/lib/connection.js:128:12)
在Socket.emit(events.js:223:5)
在addChunk(_stream_readable.js:309:12)
在readableAddChunk(_stream_readable.js:290:11)
在Socket.Readable.push(_stream_Readable.js:224:10)
[nodemon]应用程序崩溃-正在等待文件更改,然后再启动。。。

如何检查此类属性?

您可以通过这种方式进行检查

if (results.rows && results.rows[0].administrator) {}
为了获得更好的结果,您可以通过这种方式进行检查


你可以这样检查

if (results.rows && results.rows[0].administrator) {}
为了获得更好的结果,您可以通过这种方式进行检查


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

if(results&&results.rows&&results.rows[0]&&results.rows[0]。管理员!==未定义)


将正常工作。

您所做的是正确的,您只需要检查结果中是否有行,这就是为什么会有结果。行[0]在代码中未定义。类似于

if(results&&results.rows&&results.rows[0]&&results.rows[0]。管理员!==未定义)

工作正常。

您可以使用“HasownProperty”

如果属性存在,则返回true。

您可以使用“hasownproperty”


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

结果。行[0]
未定义的
,而不是
结果。行[0].administrator
。正如错误所述,您正试图使用值
未定义的
中的
.administrator
属性。您很容易受到SQL注入攻击。请使用正确的参数化查询!什么意思?
结果。行[0]
未定义的,而不是
结果。行[0].administrator
。正如错误所述,您正试图使用值
未定义的
中的
.administrator
属性。您很容易受到SQL注入攻击。请使用正确的参数化查询!什么意思?是的,谢谢!此解决方案似乎有效properly@spike32最受欢迎的是,你应该把答案标记为correct如果解决方案解决了您的问题是的,谢谢!这个解决方案似乎有效properly@spike32非常欢迎,如果答案正确,您应该标记答案。如果答案解决了您的问题,您应该标记答案正确。这是最好的解决方案之一!这是最好的解决方案之一!非常感谢,这个解决方案也很有帮助!非常感谢,这个解决方案也很有帮助!
if (results.rows && results.rows[0].hasOwnProperty('administrator') {}