2016-07-26 73 views
0

我正在使用koa, 如何在一些条件满足时将用户请求发送到另一个服务器,然后从服务器获得响应并将其发送给用户,就好像我是代理服务器。 我使用http.request并获得资源,现在,我怎么管资源到用户的插座,就像原来的http服务器res.pipe(response)nodejs pipe http对koa res的响应

例如

var options = { 
     host: "blog.suconghou.cn", 
     port: 80, 
     encoding: null, 
     path: "http://blog.suconghou.cn", 
     headers: { 
     Host: "blog.suconghou.cn" 
     } 
    }; 

    http.request(options, function(res) 
    { 
     res.pipe(process.stdout); 
     console.log(res.body,typeof res); 
     ctx.body=res; // ctx is this in app.use 
    }).end(); 

那不行,我不“知道如何把它管到KOA的响应

+0

idea:在一个函数中包装http.request,该函数用'resolve(res)'返回一个promise。从路由中,尝试'ctx.body = yield makeRequest(...)'。你的代码的一个问题是你的koa处理程序在请求回调完成之前返回。你需要等待它。 – danneu

+0

@danneu好吧,我知道,但我该如何使用管道如https://github.com/koajs/koa/blob/master/lib/application.js#L227,所以我没有必要做了很多有关标题 – suconghou

回答

-1

request库支持流,使用它你可以做以下。

let request = require('request'); 

function *mid() { 
    let options = { 
     host: "blog.suconghou.cn", 
     port: 80, 
     encoding: null, 
     path: "http://blog.suconghou.cn", 
     headers: { 
      Host: "blog.suconghou.cn" 
     } 
    }; 

    this.req.pipe(request(options)) 
      .pipe(this); 
      .once('error', console.log); 
}