Express POST接口取消注释校验代码报UnhandledPromiseRejectionWarning问题咨询
问题原因
- 校验代码存在未定义变量引用错误:你在校验分支中返回的是
result.error,但你整个路由逻辑里从来没有定义过result变量,取消注释后执行到这个分支时会抛出引用错误。这段校验逻辑写在try...catch块之外,async函数中未被捕获的错误会自动转换为未处理的Promise拒绝,直接触发你遇到的报错。 - 现有代码还存在隐藏问题:
catch块中使用的savedClient是try块内部定义的变量,只有client.save()执行成功时才会初始化,一旦触发catch逻辑,savedClient属于未定义状态,访问savedClient.error也会抛出额外的未捕获错误。
修复方案
先修正两个变量引用错误即可:
- 校验分支的
result.error改成client.error catch块的savedClient.error改成捕获到的error对象
修复后代码示例:
router.post("/", async (req, res) => { let client = validate(req.body); if (client.error) { res.status(400).json(client.error); return; } client = new Client(req.body); try { let savedClient = await client.save(); res.location(`/${savedClient._id}`).status(201).json(savedClient); } catch (error) { res.status(500).json(error); } });
内容的提问来源于stack exchange,提问作者Clancinio
相关产品推荐
相关产品推荐

