gpt4 book ai didi

node.js - 为什么我不能在我的 Node 应用程序中重命名这个对象?

转载 作者:行者123 更新时间:2023-11-29 14:34:04 25 4
gpt4 key购买 nike

我有一个 node.js/express 应用程序使用 node-postgres 与 Postgres 数据库通信模块。它与 async/await 一起工作,但如果我将返回的对象重命名为 { rows } 以外的任何对象,它将返回未定义。这是我的代码;请注意 async 下方和 const { rows } = ... 上方的注释:

var express = require('express');
var router = express.Router();

const { Pool } = require('pg');
const pool = new Pool({
connectionString: 'postgresql://postgres@localhost/mydb'
});

router.post('/login', function(req, res, next) {
var username = req.body.username;
var password = req.body.password;

(async () => {
// if I rename this from "rows" to, say, "userdetails", it comes back undefined
const { rows } = await pool.query(`
SELECT id, password
FROM myschema.users
WHERE username = $1
LIMIT 1;`,[username]);

if (rows.length) {
// check password, etc, etc.
return res.status(200).send();
} else {
return res.status(401).send();
}
})().catch(e => setImmediate(() => {
res.status(500);
}
));

});

module.exports = router;

我确定我在这里遗漏了一些非常基本的东西,但为什么我不能重命名它? pg 模块是否以某种方式规定返回的 var/const 必须命名为 { rows }?如果是这样,我怎么可能发现它?我在 await 处设置了一个断点并逐步执行代码,但我仍然不清楚。

最佳答案

当你执行 const { rows } = xxx 时,你正在使用 object destructingxxx.rows 属性分配给本地范围内与该属性同名的新变量。

因此,当您将该属性的名称更改为其他名称时:

const { myVar } = xxx;

代码现在正在寻找属性 xxx.myVar,它可能不存在,因此以 undefined 结束。

如果你想使用不同的名称,那么你必须使用不同形式的对象解构赋值(包括新名称)或者根本不使用解构而只分配 .rows 属性到一个新变量。

例如,您可以改为这样做:

const result = await pool.query(`
SELECT id, password
FROM myschema.users
WHERE username = $1
LIMIT 1;`,[username]);

const myVar = result.rows;

或者您可以在对象解构分配中指定一个新名称:

const {rows: myVar} = await pool.query(`
SELECT id, password
FROM myschema.users
WHERE username = $1
LIMIT 1;`,[username]);

console.log(myVar);

关于node.js - 为什么我不能在我的 Node 应用程序中重命名这个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47615788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com