我对next();
感到困惑,我通读了这个post,它实际上说它将控制权传递给下一条路线。在下面的代码中,将next();
放在其中会导致我得到“将标头发送到客户端后无法设置标头”。但是,如果我将其注释掉,然后恢复我的if语句的else
子句,则在传递不正确的empID以及传递正确的empID时,它都可以正常运行。我希望有人能够解释到底发生了什么?为什么next()
的位置很重要?似乎会以任何一种方式调用它?
我正在尝试执行此post中发生的事情,这可以为req.user
增值,但是我完全无法使它发挥作用,所以我我正在尝试我在这里使用的方法。
let checkEmp = (req, res, next) => {
db.get("select * from Employee where id = $id", {$id: req.empID},
(err, row) => {
if (err || row === undefined) {
res.status(404).send();
// } else {
// next();
}
});
next();
};
// get all timesheets
timesheetRouter.get("/", getParams, checkEmp, (req, res, next) => {
if (req.empID) {
db.all("select * from Timesheet where employee_id = $id", {$id: req.empID},
(err, rows) => {
if (err) {
next(err);
} else {
return res.status(200).send({timesheets: rows});
}
});
} else {
return res.status(404).send("Nothing to see here");
}
});
答案 0 :(得分:0)
看起来db.get()
可能是异步的,因此在所示示例中,next()
将在db.get()
完成之前被调用,然后移至下一个处理程序。然后,db.get()
完成后,它将尝试发送响应,但是响应已由主处理程序中的匿名函数发送。通过将next()
移到db.get()
内,您实际上是在等待其完成才继续前进。