KOA回应错误水线

时间:2014-08-17 16:31:16

标签: node.js sails.js waterline koa

我使用水线ORM在mongo DB中插入新的用户数据。这是我的控制器操作的代码。

function *(){
    var self = this;
    var attributes= this.request.body
    var userModel = this.models.user;

    userModel.create(attributes).exec(function(err, model){
        self.type = 'application/json';
        self.body = {success:true,description:"user Created"};
    });
}

当我尝试执行请求时,出现以下错误:

...../node_modules/sails-mongo/node_modules/mongodb/lib/mongodb/connection/base.js:245
    throw message;      
          ^
Error: Can't set headers after they are sent.
    at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:331:11)

我不是Koa的专家,但我认为这是因为这是一个异步过程而且回复信息是之前编写的。

任何人都可以帮助我吗?我非常有兴趣了解这项技术。

1 个答案:

答案 0 :(得分:0)

  

我认为这是因为这是一个异步过程而且之前写过了回复消息。

呀。 Koa不了解查询,因此它会在查询完成执行之前继续完成响应。

你可以yield一个function到Koa包装查询并通知它完成。

function *() {
    // ...

    yield function (done) {
        userModel.create(attributes).exec(function (err, model) {
            self.type = 'application/json';
            self.body = {success:true,description:"user Created"};
            done(err);
        });
    }
}

documentation of co koa is built on使用thunkify生成此类函数,进一步演示了 thunks 的使用。