CNode

koa中我想等数据库写入完之后再返回值,但发现请求是404

问答
Aalonprince发布于11 年前最后回复11 年前8 回复6788 浏览0 收藏

刚刚开始学习koajs,我在想把通过post传入的数据存入数据库之后再应答请求 具体代码:

function *(next) {
        var _this = this;
        var post = new Post({
            content: this.request.body.content,
            sequence: this.request.body.sequence
        });
        var promise = new Promise(function(resolve, reject) {
            post.save(function(err, result) {
                if (err) {
                    reject();
                }else {
                    resolve();
                };
            });
        });
        
        promise.then(function() {
            return _this.body = {
                result: 'haha'
            }
        }, function() {
            return _this.body = {
                result: 'wuwu'
            }
        });
    }

然后我发现我的请求返回值都是404,使用了bodyparser包,不知道和这个有没有关系

查看回复

回复 (8)

H
hwoarangzk#2·11 年前

你这个是在异步回调里才设置body的 你试着在这个middleware最后直接加一句this.body = 'hello world'; 应该就不是404了 其实你可以把save方法包装一下,用thunkify或者自己写 直接yield多好 就没这问题了

M
mukaiu#3·11 年前

最后面 return promise;

A
alonprince#4·11 年前
引用 hwoarangzk你这个是在异步回调里才设置body的 你试着在这个middleware最后直接加一句this.body = 'hello world'; 应该就不是404了 其实你可以把save方法包装一下,...

@hwoarangzk 您好能稍微详细一点说下怎么包装吗?刚刚开始接触不是太会

var save = thunkify(post.save);
save()(function(){
	this.body = {
		result: 'hahah'
	}
});

是这样吗?

A
alonprince#5·11 年前
引用 mukaiu最后面 return promise;

@mukaiu 是在整个函数的最后面return promise吗?

H
hwoarangzk#6·11 年前

@alonprince

类似这样

J
joesonw#8·11 年前

this.body = yield promise;

yield可以直接用在promise上

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