CNode

Koa 中操作 Mongoose 报错问题

Aa379395979发布于12 年前最后回复12 年前8 回复5782 浏览0 收藏

在 Koa 中使用 Mongoose 操作数据库,代码如下:

user.save(function(err){
        console.log(err);
        if(err) {
            //这里不报错
            return _this.redirect('back');
        }else{
            //执行到这步会报错
            return _this.redirect('/');
        }
    });

errnull 的时候会报错,错误内容为:

/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)

J
jiyinyiyong#1·12 年前

这里报错怀疑是 app.get('/', ->) 那边写得有问题:

res.redirect('/');

Can't set headers after they are sent 一般是 res.end ""; res.writeHeader 200 这样的代码造成的, res.end 以后不让设置 header 了.

T
tomgor#2·12 年前

你傻逼,nodejs是异步的,你在外面的函数中,是不是已经写会给客户端了

J
jiyinyiyong#4·12 年前
引用 jiyinyiyong这里报错怀疑是 app.get('/', ) 那边写得有问题: Can't set headers after they are sent 一般是 res.end ""; res.writeH...

@a379395979 问题不是出在 redirect, 我觉得是在 / 的逻辑里有问题, 访问 / 正常吗?

S
SoaringTiger#5·12 年前

你试试写成try catch结构的行不行? try{ yield user.save(); return this.redirect('back'); }catech(e){ console.log(e); return this.redirect('/'); }

F
freew01f#6·12 年前

koa 哪有这么用的 还用function callback 那你还用koa 干啥 Mongoose不是直接就支持Promise吗 直接用不就完了 直接Promise封装 native 驱动不是更简单

A
a379395979#7·12 年前
引用 jiyinyiyong这里报错怀疑是 app.get('/', ) 那边写得有问题: Can't set headers after they are sent 一般是 res.end ""; res.writeH...

@jiyinyiyong 你好,我代码发给你能帮我看下吗,今天解决了一天还有这个错。。。

参与回复
登录后即可参与回复。登录