2016-07-26 96 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); 
}