首页 > 解决方案 > 错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头 ASYNC AWAIT 不起作用

问题描述

我正在尝试验证会话中是否有一些数据。如果不是,控制器会将您重定向到另一条路线,以获取该数据。问题是我收到错误“错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头”

我在 StackOverflow 上进行了搜索,发现每个遇到此问题的人都使用它 async/await 来修复它,但我已经在使用 async await。

您的帮助将不胜感激!非常感谢!何塞

dashboardCtrl.init = async (req, res) => {
//
  var frontdata = req.session;
  if (!frontdata.user) {
    frontdata.user = await userfacebook.findOne({ where: { 'email': frontdata.passport.user } });

  };
  if (!frontdata.store) {
    tmpstoredata = await userstore.findOne({ where: { 'userfacebookId': frontdata.user.id } });
    if (!tmpstoredata) {
      res.redirect('/toURL');
    };
  };
};

注意:我正在使用 EJS MATE。如果我这样做

dashboardCtrl.init = async (req, res) => {
//
      res.redirect('/toURL');
};

重定向有效,问题在于使用等待。所以我不知道如何继续

标签: javascriptnode.jsexpressredirectejs

解决方案


该错误表示您已经向客户发送了答案。换句话说,您正在尝试第二次声明 -> **res.*****。

再次检查流程,以防您两次对 express 的“res”声明任何操作。

下面的解决方案允许您拥有良好的结构化和可读的异步代码。

dashboardCtrl.init = (req, res) => {

// I think destructuring looks good
let { user, store } = req.session;

(async () => {
    try {
        if (!user) user = await userfacebook.findOne({ where: { 'email': frontdata.passport.user } });
        let tmpstoredata;
        if (!store) tmpstoredata = await userstore.findOne({ where: { 'userfacebookId': frontdata.user.id } });

        if (!tmpstoredata) res.redirect('/toURL');

    } catch (err) {
        // don't forget ;)
    }
})()
};

希望这可以帮到你。问候。


推荐阅读