Что next () делает на этом маршруте Express и почему важен его порядок в коде?

nathanjw спросил: 07 октября 2018 в 12:20 в: node.js

Я запутался с next();, который я прочитал в этом сообщении , в котором, по сути, говорится, что он передает управление следующему маршруту. В моем коде ниже наличие next();, где оно находится, заставляет меня получить "Невозможно установить заголовки после того, как они отправлены клиенту". Однако, если я закомментирую это, а затем восстановлю предложение else в моем операторе if, он будет работать правильно как при передаче неверного empID, так и при правильном. Я надеюсь, что кто-то может объяснить, что именно происходит? Почему положение next() имеет значение? Похоже, это будет названо в любом случае?

Я пытаюсь сделать то, что происходит в этом посте , который добавляет значение, скажем, , но я не смог заставить это работать вообще, поэтому я пробую метод, который у меня есть здесь.

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 ответов