向远程服务器发出请求

问题描述:

我试图通过express.js从我的角客户端应用程序代理请求。这是中间件向远程服务器发出请求

app.use('/v1', function(req, res) { 
    var url = process.env.API_URL + req.url; 
    console.info('Proxing to: ', url); 

    var r = null; 

    switch(req.method) { 
     case 'POST': 
     r = request.post({uri: url, json: req.body }); 
     break; 
     case 'PUT': 
     r = request.put({uri: url, json: req.body }); 
     break; 

     default: 
     r = request(url); 
    } 

    console.log(r); 

    return req.pipe(r).pipe(res); 
}); 

快递服务器正在运行http://localhost:3030。中间件适用于http://localhost:3030/v1的GET请求,但它不适用于POST或PUT请求。 当我发出PUT或POST请求时服务器被终止。这是错误

stream.js:74 
     throw er; // Unhandled stream error in pipe. 
    ^

Error: write after end 
    at ClientRequest.OutgoingMessage.write (_http_outgoing.js:426:15) 
    at Request.write (/Users/user/Projects/maxmc/node_modules/request/request.js:1514:27) 
    at end (/Users/user/Projects/maxmc/node_modules/request/request.js:552:18) 
    at Immediate._onImmediate (/Users/user/Projects/maxmc/node_modules/request/request.js:581:7) 
    at tryOnImmediate (timers.js:543:15) 
    at processImmediate [as _immediateCallback] (timers.js:523:5) 
error Command failed with exit code 1. 

我不能确定问题是什么。

+0

看来你越来越成功 –

卸下bodyParser中间件修复了这个

//app.use(bodyParser.json()); 
//app.use(bodyParser.urlencoded({ extended: true })); 

尝试使用下面的代码

app.use('/v1', function(req, res) { 
    var url = process.env.API_URL + req.url; 
    console.info('Proxing to: ', url); 

    var r = null; 

    switch (req.method) { 
    case 'POST': 
     r = request.post({ 
     uri: url, 
     json: req.body 
     }); 
     return req.pipe(r).pipe(res); 
    case 'PUT': 
     r = request.put({ 
     uri: url, 
     json: req.body 
     }); 
     return req.pipe(r).pipe(res); 

    default: 
     r = request(url); 
     return req.pipe(r).pipe(res); 
    } 

    //console.log(r); 

    //return req.pipe(r).pipe(res); 
}); 

尝试使用此代码

+0

它返回相同的前结束请求错误 – MrFoh