Koa 中操作 Mongoose 报错问题
发布于 11 年前 作者 a379395979 5601 次预览 最后一次回复是 11 年前 来自
在 Koa 中使用 Mongoose 操作数据库,代码如下:
user.save(function(err){
console.log(err);
if(err) {
//这里不报错
return _this.redirect('back');
}else{
//执行到这步会报错
return _this.redirect('/');
}
});
在 err 为 null 的时候会报错,错误内容为:
/usr/app/node/koa/node_modules/mongoose/lib/utils.js:413
throw err;
^
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:331:11)
at Object.module.exports.set (/usr/app/node/koa/node_modules/koa/lib/response.js:377:16)
at Object.module.exports.redirect (/usr/app/node/koa/node_modules/koa/lib/response.js:220:10)
at Object.proto.(anonymous function) [as redirect] (/usr/app/node/koa/node_modules/koa/node_modules/delegates/index.js:39:31)
at Promise.<anonymous> (/usr/app/node/koa/app/controller/UserController.js:34:26)
有人遇到过嘛,怎么解决?
8 回复
这里报错怀疑是
app.get('/', ->)那边写得有问题:Can't set headers after they are sent一般是res.end ""; res.writeHeader 200这样的代码造成的,res.end以后不让设置 header 了.你傻逼,nodejs是异步的,你在外面的函数中,是不是已经写会给客户端了
this.redirect(’/’); 改成this.redirect(‘back’); 也一样。。
@a379395979 问题不是出在
redirect, 我觉得是在/的逻辑里有问题, 访问/正常吗?@jiyinyiyong 你好,我代码发给你能帮我看下吗,今天解决了一天还有这个错。。。
@a379395979 贴一部分出来吧… Koa 我没用过, 不一定能帮上忙
你试试写成try catch结构的行不行? try{ yield user.save(); return this.redirect(‘back’); }catech(e){ console.log(e); return this.redirect(’/’); }
koa 哪有这么用的 还用function callback 那你还用koa 干啥 Mongoose不是直接就支持Promise吗 直接用不就完了 直接Promise封装 native 驱动不是更简单