当我想从另一台主机上的网站访问我的couchdb时,我遇到了跨域策略问题。所以我在openshift上设置了一个nodejs来创建一个带有express-cloudant的反向代理。 在修改了openshift中的nodejs app示例之后,我现在能够访问通过app.get设置的索引和自述文件
self.app.get('/', routesDir.index);
self.app.get('/readme', require('./routes/readme'));
但是当涉及到应该重定向到我的cloudant couchdb的代理时,我最终得到了错误503。 这就是我如何设置代理(来自https://github.com/cloudant-labs/express-cloudant中的app.js示例)
proxy = require('./routes/proxy'),
http = require('http'),
path = require('path'),
proxy_url = "https://" +
process.env.USERNAME +
".cloudant.com",
admin_url = "https://" +
process.env.USERNAME +
":" +
process.env.PASSWORD +
"@" +
process.env.USERNAME +
".cloudant.com"; self.app = express();
//Cloudant
self.app.set('port', process.env.PORT || 3000);
console.log('Port: ' + self.app.get('port'));
self.app.set('views', __dirname + '/views');
self.app.set('view engine', 'jade');
self.app.use(express.favicon());
self.app.use(express.logger('dev'));
// all requests to /proxy* get forwarded to Cloudant through the proxy
self.app.use(proxy('proxy', proxy_url));
self.app.use(express.bodyParser());
self.app.use(express.methodOverride());
self.app.use(self.app.router);
self.app.use(express.static(path.join(__dirname, 'public')));
// development only
if ('development' == self.app.get('env')) {
self.app.use(express.errorHandler());
}
self.app.get('/', routesDir.index);
self.app.get('/readme', require('./routes/readme'));
require('./routes/api')(self.app, 'api', admin_url);
proxy.js的内容(我未经修改):
module.exports = function(prefix, proxy_url){
return function(req, res, next){
var proxy_path = req.path.match(RegExp("^\\/" + prefix + "(.*)$"));
console.log('Proxy path: ' + proxy_path);
if(proxy_path){
var db_url = proxy_url + proxy_path[1];
req.pipe(request({
uri: db_url,
method: req.method,
qs: req.query
})).pipe(res);
} else {
next();
}
};
};
我的请求如下:
curl -vX POST http://myproxy-myappws.rhcloud.com/proxy/_session -H 'application/x-www-form-urlencoded' -d 'name=myuser&password=mypassword'
最终出现错误503
当我尝试使用相同的请求时:
curl -vX POST https://me.cloudant.com/_session -H 'application/x-www-form-urlencoded' -d 'name=myuser&password=mypassword'
效果很好。
我是nodejs和express-cloudant的新手,所以也许我错过了一件非常重要的事情。 有任何信息,方向,提示吗?
答案 0 :(得分:0)
如果您在openshift上运行该脚本,则需要侦听端口8080以使其可从外部访问,或者侦听OPENSHIFT_NODEJS_PORT。