2016-07-18 4 views
1

api으로 시작하는 요청을 다른 서버로 전달해야합니다. 나는이 같은 expressrequest 사용node.js 요청으로 프록시하기 : DELETE 메소드가 작동하지 않습니다.

var API_SERVER_HOST = "http://something.lala/output-api"; 

    // call the packages we need 
    var express = require('express'); 
    var request = require('request'); 

    var port = process.env.PORT || 8080; // set our port 
    var app = express();     // define our app using express 

    // all of our routes will be prefixed with /api 
    app.use(express.static('webapp')); // static content 
    app.use('/api', function(req, res){ // proxying 
     var url = API_SERVER_HOST + req.url; 
     console.log(" - " + req.url + " => " + url + " " + req.method); 
     req.pipe(request(url)).pipe(res); 
    }); 

    // launch 
    app.listen(port); 
    console.log('Magic happens on port ' + port); 

지금까지 너무 좋은 : 마법처럼 GET, POST, PUT 작동하지만 DELETE 방법이 잘못된 요청으로 끝낼. 올바른 URL 및 삭제 방법입니다. 로그의 URL을 curl -X DELETE에 붙여 넣으면 매력처럼 작동합니다.

요청 파이프가 DELETE 메소드를 처리하지 못합니까? 어떤 생각?

답변

0

같은 문제가있는 사용자의 경우, requests 대신에 http-proxy을 사용하여 문제를 해결했습니다. 코드는 다음과 같습니다.

var API_SERVER_HOST = "http://something.lala/output-api"; 

var express = require('express'); 
var request = require('request'); 
// use http-proxy instead of requests 
var proxy = require('http-proxy').createProxyServer({ host: API_SERVER_HOST }); 

var port = process.env.PORT || 8088; 
var app = express();     


// setup redirect 
app.use('/api', function(req, res, next) { 
    proxy.web(req, res, { 
     target: API_SERVER_HOST 
    }, next); 
}); 

// listen to redirects (for logging purposes only) 
proxy.on('proxyReq', function(proxyReq, req, res, options) { 
    console.log("request : url=", req.url, req.body ? "body=" + req.body : ""); 
    console.log("response: status=", res.statusCode); 
}); 

모든 유형의 요청에 적합하며 본문, 쿼리 및 URL 매개 변수를 완벽하게 처리합니다.

관련 문제