我有这条koa路线/landing
,结果是404。
function* landing() {
//this.body = "response"; //1
var request = require('request');
request.post('http://url.com/resource',
{ json: { key: "post data"} },
function (error, response, body) {
if (!error && response.statusCode == 200) {
var token = body.data;
getListByToken(token, function(list){
this.body = list; //2
});
}
});
}
查看顶部//1
中的评论 - 您可以在路线中定义koa中的响应正文。而不是//1
我想从//2
发送响应,即从该request.get中发送响应。
当用户被路由到/landing
时,帖子请求必须从网址获取一些数据。 getListByToken
将使用所获取的数据来提供应发送给用户的其他一些数据list
。上述代码应该有效,但会导致koa的404
Not Found
响应。
答案 0 :(得分:2)
我们可以使用promises,简单而干净的方式来管理异步代码。
var request = require('request-promise');
. . .
function* landing() {
try {
let response = yield request( {
method: 'POST',,
url: 'http://url.com/resource',
headers: { 'content-type': 'application/json' },
body: JSON.stringify( { json: { key: "post data"} } )
} );
this.body = yield new Promise( function( resolve, reject ) {
if ( response.statusCode == 200 ) {
getListByToken( response.body.token, function( list ) {
resolve( list );
} );
}
} );
} catch ( err ) {
/* do something with your errors */
}
}
答案 1 :(得分:0)
用render json: user, include: ['notifications']
解决了这个问题。它使koa保持响应,直到收益发生。
q