gpt4 book ai didi

javascript - 当 knex 使用 async/await 抛出错误时结束响应

转载 作者:行者123 更新时间:2023-11-30 19:35:11 25 4
gpt4 key购买 nike

我在我的 api 中收到“在将 header 发送到客户端后无法设置 header ”这个错误。我知道我多次发回响应导致了问题,但我不确定如何解决它。

当第一个数据库调用 res.status(500) 返回/发送响应到客户端时发生 knex 错误时会发生错误。问题是我不确定如何在那里结束代码,或者我什至应该结束它吗?我知道我可能会把我的 promise 串起来,这样就不会发生这种情况,但我相信最终使用 async/await 会更干净。

我目前强制我的代码转到第一个数据库调用中的 catch block 。而且我知道当我返回/发送 res.sendStatus(200) 时会出现“在将 header 发送到客户端后无法设置 header ”错误。

这个问题有什么好的解决方案?

   let existingUser = await knex('user').where({ username }).orWhere({ email }) // <-- first db call
.then(([user]) => user)
.catch(() => res.status(500))

if (!existingUser) {
knex('user').insert({
username,
password_digest,
}) // <-- second db call
.then(() => res.sendStatus(200))
.catch(() => res.sendStatus(500))
} else {
return () => res.sendStatus(409)
}

在此先感谢 Stackoverflow 社区!

最佳答案

我会使用 try-catch block 而不是 .then.catch。它使理解代码在做什么变得更容易,就像 async/await 一样。

这是一个例子:

try {
let existingUser = await knex('user').where({ username }).orWhere({ email }).first()

if (!existingUser) {
await knex('user').insert({
username,
password_digest,
})

return res.sendStatus(200);
} else {
return res.sendStatus(409)
}
} catch (error) {
return res.sendStatus(500)
}

如果在 try block 中抛出错误,您将跳转到 catch block 。

我还没有测试过这个特定的片段,所以如果它不起作用请告诉我。

关于javascript - 当 knex 使用 async/await 抛出错误时结束响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56013341/

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