【发布时间】:2021-08-21 01:22:10
【问题描述】:
我有两张桌子,一张给毕业生,一张给导师。我想使用以下端点找出一封电子邮件来自哪个表。
router.post("/reset/:email", async (req, res) => {
//search which table the email is from
const { email } = req.params;
try {
const result_g = await pool.query(
"select * from graduates where email=$1",
[email]
);
const result_m = await pool.query("select * from mentors where email=$1", [
email,
]);
if (result_g) {
return res.json({ id: result_g.rows[0].id, user: "graduates"});
} else if (result_m) {
return res.json({ id: result_m.rows[0].id, user: "mentors" });
} else {
return res.json("email isn't found");
}
} catch (err) {
return res.status(500).send(err, "server error");
}
});
但是,我不断收到错误消息“未处理的承诺拒绝警告” 这不仅仅是一个警告,因为我使用邮递员进行了尝试,但请求不起作用。我假设错误来自 result_g 和 result_m 或 if 条件,但我无法确定问题到底出在哪里。如果有人解释为什么在 node/express 中不允许这样做,我将不胜感激。谢谢!
【问题讨论】:
-
#1 你抓到执行了吗?打印错误。 #2 打印查询 1 和 2 的结果以检测是否有错误。 #3 如果要检测的话,在你的决赛中做同样的事情。告诉我们您的日志结果
-
@Bravo 它来自节点。
-
好的 - 但它不是来自那段代码 - 因为它是由 try/catch “保护”的,没有在 catch 中抛出 - 还有其他问题
-
除非
const { email } = req.params;当然是抛出 - 即如果req.params是null或undefined- 将const { email } = req.params;放在try中 - 看看它是否至少解决了未处理的问题拒绝 -
我很惊讶您没有在节点 14 的错误输出中获得清晰的堆栈跟踪。您可以尝试在
process上收听unhandledRejection事件并将error.stack记录到那里查看堆栈跟踪。我不认为此错误来自您显示的代码。
标签: javascript node.js express endpoint