2013-07-07 27 views
7

yılında PUT:Ters vekil POST üzerinde asılı ve ben Express'te CouchDB için aşağıdaki ters proxy uygulamak için <a href="https://github.com/mikeal/request" rel="noreferrer">request</a> kullanmak node.js

app.all(/^\/db(.*)$/, function(req, res){ 
    var db_url = "http://localhost:5984/db" + req.params[0]; 
    req.pipe(request({ 
    uri: db_url, 
    method: req.method 
    })).pipe(res); 
}); 

GET istekleri, çalışır: istekleri istemciden gitmek node.js'den CouchDB'ye ve tekrar başarılı bir şekilde geri dönün. POST ve PUT istekleri süresiz olarak bekler. Günlük ifadeleri proxy'ye kadar çalışır, ancak CouchDB isteğin alındığını belirtmez. Bu neden oluyor ve nasıl düzeltilebilir?

cevap

7

Express' bodyparser katman boru asmak için neden bir şekilde isteği değiştirir (kod denenmemiş, işe yaramazsa bana bildirin, ancak yakın olmalıdır). Neden olduğundan emin değilsiniz, ancak proxy'nizi bodyparser'dan önce yakalayan middleware'e dönüştürebilirsiniz. Bunun gibi:

// wherever your db lives 
var DATABASE_URL = 'http://localhost:5984/db'; 

// middleware itself, preceding any parsers 
app.use(function(req, res, next){ 
    var proxy_path = req.path.match(/^\/db(.*)$/); 
    if(proxy_path){ 
    var db_url = DATABASE_URL + proxy_path[1]; 
    req.pipe(request({ 
     uri: db_url, 
     method: req.method 
    })).pipe(res); 
    } else { 
    next(); 
    } 
}); 
// these blokes mess with the request 
app.use(express.bodyParser()); 
app.use(express.cookieParser()); 
1

istek isteklerini varsayılan olarak alır. Yöntemi ayarlamanız gerekiyor.

app.all(/^\/db(.*)$/, function(req, res){ 
    var db_url = ["http://localhost:5984/db", req.params[0]].join('/'); 
    req.pipe(request({ 
    url: db_url, 
    method: url.method 
    })).pipe(res); 
}); 

+0

Bunu denediniz; iyi değil. Bunu belirtmek için örnek kodu güncellendi. – garbados

İlgili konular