从koa中的request.post回调中发送对客户端的响应

时间:2016-06-30 10:47:25

标签: node.js routes koa

我有这条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响应。

2 个答案:

答案 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

感谢https://stackoverflow.com/a/22159513/1128379