节点js具有Couchbase同步网关的反向代理PUT / POST请求

时间:2016-05-31 03:31:01

标签: node.js http express couchbase reverse-proxy

我试图在Couchbase SyncGateway前面构建一个反向代理。在向同步网关发送请求之前,我想将它们发送到身份验证服务器进行身份验证,如果一切正常,请将请求(从原始版本未修改)发送到同步网关。数据库没有及时更新客户端修改,我相信这是因为我没有成功代理PUT / POST请求。这是我的代码:

var http = require('http');
var httpProxy = require('http-proxy');
var apiProxy = httpProxy.createProxyServer();
var request = require('request').defaults({json: true});

var authServer = 'http://authserverdns:5000';
var syncGateway = 'http://syncgatewaydns:4984';

http.createServer(function (req, res) {
    if (req.method == 'POST' || req.method == 'PUT') {
        req.body = '';

        req.addListener('data', function(chunk) {
            req.body += chunk;
        });

        req.addListener('end', function() {
            processRequest(req, res);
        });
    } else {
        processRequest(req, res);
    }

}).listen(8080);

function processRequest(req, res) {
    request(authServer, function(error, response, body) {
        if (body.authenticated) {
            console.log('authenticated !!!');
            apiProxy.web(this.req, this.res, {target: this.sg});
        } else {
            console.log('request denied !!!');
        }
   }.bind({req: req, res: res, sg: syncGateway}));
}

起初我使用快速服务器并遇到同样的问题。当我调查问题时,看起来Express和代理PUT / POST请求可能存在问题。所以,我试图在那里使用一些例子,这就是我最终得到的结果,但仍然无效。关于我在哪里出错的任何想法?经过身份验证的打印件,所以我知道我已经到了代理点。并且同步网关似乎没有GET请求。

由于

1 个答案:

答案 0 :(得分:0)

啊。我没有将其余的URL添加到Sync Gateway的转发地址。帖子here有所帮助。