Koa js:错误:在发送之后无法设置标题。 MongoDB的

时间:2017-05-07 08:34:48

标签: node.js mongodb async-await koa mlab

我正在使用Koa 2的异步功能。

我收到以下错误。

  

events.js:163   下午1:56         扔掉//未处理的错误'事件   下午1:56         ^   下午1:56   下午1:56   错误:发送后无法设置标头。   下午1:56       在ServerResponse.setHeader(_http_outgoing.js:371:11)   下午1:56       在Object.set(/app/node_modules/koa/lib/response.js:440:16)   下午1:56       at Object.redirect(/app/node_modules/koa/lib/response.js:261:10)   下午1:56       at Object.proto。(匿名函数)[as redirect](/app/node_modules/delegates/index.js:40:31)   下午1:56   跳到   在url.findOne(/app/server.js:126:9)   下午1:56       在model.Query。 (/app/node_modules/mongoose/lib/model.js:3737:16)   下午1:56       在/app/node_modules/kareem/index.js:277:21   下午1:56       在/app/node_modules/kareem/index.js:131:16   下午1:56       at _combinedTickCallback(internal / process / next_tick.js:73:7)   下午1:56       at process._tickCallback(internal / process / next_tick.js:104:9)   下午1:56   6分钟前

这是我的代码的一部分。

async function red(ctx) {
  let redurl = "//url here";
  url.findOne({ shortenedLink: redurl }, (err, data) => {
    //find if short url matches long url in db
    if (err) throw err;
    if (data) {
      //if matches then redirect to long url
      ctx.redirect(data.url); //getting the error here
      console.log("matched");
    } else console.error("--"); 
  });
}

我的完整代码可以找到here

2 个答案:

答案 0 :(得分:1)

如果您使用async函数,则应该遵循async /`await?模式,而不是使用回调。所以你应该改写你的电话:

async function red(ctx) {
  let redurl = "//url here";
  try {
      data = await url.findOne({ shortenedLink: redurl })
      if (data) {
        ctx.redirect(data.url); //getting the error here
        console.log("matched");
      } else {
        console.error("--"); 
      }
  } catch (err) {
      throw err;
  }
}

答案 1 :(得分:0)

我遇到了同样的问题,因为我在前面的代码中使用了链式sendStatus函数。

Country.count({ name: name }, (error, count) => {
        if (count > 0) {
            console.log(count);
            error = name + alreadyExists;
            res.sendStatus(500).sendStatus(500);
        }
});

删除多余的sendStatus修复了我的问题。

Country.count({ name: name }, (error, count) => {
        if (count > 0) {
            console.log(count);
            error = name + alreadyExists;
            res.sendStatus(500);
        }
});