我正在使用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。
答案 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);
}
});