next()并发送404页面

时间:2017-07-12 23:03:34

标签: javascript node.js http-status-code-404 next

我正在尝试发送一个404页面,这是一个.pug文件,只要数据库中没有ID参数。我在api路由中调用next(),当我在弹性搜索回调中执行它时,它将抛出一个页面未找到错误以及两个Cant set header after they are sent消息。当我在外面调用next()时,它将正确地显示404错误消息而不是标题消息。我不确定为什么会这样做。

//这样做会正确发送404页面。

app.get('/redirect/:id', function(req, res, next) {
        let found = false;

        if (!found) {
           return next();
        }

});

//但我需要检查一个ID是否存在,然后抛出404,但这样做是行不通的,我将继续收到有关无法设置标头和404消息的错误。

app.get('/ redirect /:id',function(req,res,next){

    search.byId(req.params.id, (err, card) => {
        if (err) log.log(err);

        if (!card || card === undefined) {
            return next();
        }
    });

});

1 个答案:

答案 0 :(得分:0)

在express中,next()函数用于将控件传递给下一个中间件。 Using Express Middleware

app.use('/user/:id', function (req, res, next) {
  console.log('Request URL:', req.originalUrl)
  next()
}, function (req, res, next) {
  console.log('Request Type:', req.method)
  next()
})

在上面的示例中,当第一个next()被调用时,第二个函数(req,res,next)(在express.js术语中,该函数被称为中间件)得到了exectued并注销请求类型。 因此,接下来对您没有帮助,因为您没有构建中间件堆栈。 如果您只想呈现404页面阅读How to redirect 404 errors to a page in ExpressJS?