2017-07-12 38 views
0

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

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

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

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

}); 

//但我需要检查,如果一个ID存在,然后扔了404,但做这种方式是行不通的,我会不断收到有关无法设置页眉错误和404消息。

app.get( '/重定向/:ID',函数(REQ,RES,下一个){

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

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

}); 
+0

为什么要使用next()'''?你完成了。 '''res.status(404).end();'''会返回你的404 – Wainage

+0

好吧我试过了,但它仍然没有发送我的404页面。在shell中,设置标题错误消息不会再显示,但也找不到404错误页面。它确实显示了一堆GET请求与304状态关联 – henhen

+0

什么叫你的终点?邮差? – Wainage

回答

0

在快递,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() 
}) 

在上面的例子中,当第一下一个()被调用第二函数(REQ,RES,下一个)(在express.js术语函数被调用中间件)得到exectued和日志出请求类型。 因为你没有构建中间件堆栈,所以接下来在这里没有帮助。 如果你只是想渲染404页面,请阅读How to redirect 404 errors to a page in ExpressJS?

相关问题