发送标头后如何重定向Node.js

时间:2020-02-12 18:00:45

标签: javascript node.js

我的admin.js控制器文件中包含以下内容

module.exports = {
  getAdmin: async (req, res) => {

 let ref = req.headers.referer;

if ((ref === undefined) || (!ref.includes('user'))) {
  res.writeHead(301,
  {Location: '/'}
);
res.end();

 res.render('admin', { indexCSS: true })
 }

  }

我想做的是,如果用户来自/user,他可以访问/admin页面,否则他将被重定向到/,即home。如果用户来自有效的引荐来源网址,该方法就可以使用,但是当我尝试直接转到该路由时,它可以正确重定向,但应用程序崩溃了,并且出现了错误Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

有没有一种方法可以重定向而不会出现该错误。

我的方法做错了什么

预先感谢

请注意,这不包括身份验证

1 个答案:

答案 0 :(得分:0)

res.end()不能像函数返回一样工作。之所以会出现此错误,是因为在使用writeHead res.end()之后调用了该方法,该方法发送回响应,然后代码尝试呈现“ admin”

module.exports = {
        getAdmin: async (req, res) => {

            let ref = req.headers.referer;

            if ((ref === undefined) || (!ref.includes('user'))) {
                res.writeHead(301, {
                    Location: '/'
                });
            } else {
                res.render('admin', {
                    indexCSS: true
                })
            }
            res.end()
       }