我使用水线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的专家,但我认为这是因为这是一个异步过程而且回复信息是之前编写的。
任何人都可以帮助我吗?我非常有兴趣了解这项技术。
答案 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 的使用。