【发布时间】:2013-12-17 20:50:01
【问题描述】:
我正在使用 ember 和 express over node 设计一个网站。它在服务器中运行,例如:SERVER_1。
我在另一台服务器上运行的 web 服务很少,比如:SERVER_2。
即:
SERVER_1 中的网站和 SERVER_2 中可用的网络服务
SERVER_1 位于代理服务器后面。我正在尝试从 SERVER_1 访问网络服务:
SERVER_1 =====[PROXY]===> SERVER_2
当我从 SERVER_1 进行 AJAX 网络服务调用时,我收到:
NetworkError: 500 Internal Server Error
但是,我可以通过浏览器成功检索值。仅通过 AJAX 代码,我正在检索 Network 500 错误。
另外为了测试,我删除了我的代理服务器设置:
SERVER_1 =====> SERVER_2
我能够通过 AJAX 代码和浏览器成功访问所有这些 Web 服务。
如果我在它们之间有代理服务器:
SERVER_1 =====[PROXY]===> SERVER_2
我收到了 -- NetworkError: 500 Internal Server Error
我想知道从在代理服务器后面运行的网站访问第三方网络服务的程序?
附加信息:
已经解决了跨域 Web 服务访问问题(网站在一台服务器上运行,Web 服务在其他具有不同端口的不同服务器上运行),我正在使用 http-proxy npm,我的代码是如下:
var express = require('express');
var routes = require('./routes');
var http = require('http');
var path = require('path');
var httpProxy = require('http-proxy');
var endpoint = {
host: 'IP_ADDRESS_WHERE_MY_WEBSERVICES_RUN',
port: 80,
prefix: '/api'
}
var proxy = new httpProxy.RoutingProxy();
var app = express();
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.methodOverride());
app.use(express.cookieParser('xxxxx'));
app.use(express.session());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
app.use(function(req, res) {
if (req.url.indexOf(endpoint.prefix) === 0) {
proxy.proxyRequest(req, res, endpoint);
}
});
app.use(express.bodyParser());
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
app.get('/', routes.index);
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
我的 AJAX 调用:
$.ajax({
type: 'GET',
async: false,
url: 'API_URL',
success: function (data) {
alert('success');
},
failure: function(error){
alert('error');
}
});
我已经使用 http-proxy 来处理所有 url 的请求了。
如何在上面的代码中配置我的代理服务器的IP地址和端口,以便我可以成功访问所有这些网络服务?或者有什么方法可以让我的代理配置在 AJAX 调用中?
谁能指导我?
谢谢
【问题讨论】:
-
使用forward proxy怎么样?
-
Node.js 中的许多对象不会引发错误,而是会发出
error事件。只需收听错误事件并console.log它,以便我们知道发生了什么。 -
我尝试使用正向代理。但是,它并没有帮助我。你能指导我吗?
-
设置NPM配置与你的问题无关。据我了解,您有一个本地服务器 S1 正在尝试访问代理后面的外部 url S2: [ S1 ] ==== [ proxy ] ===> [ S2 ] 您使用库来请求 S2 S1 ?除非您直接从 Ajax 的浏览器中使用这些 REST Web 服务?
-
感谢 Feugy 的回复。我在 S1 中使用 http 和 http-proxy 库来访问 Web 服务(在 S2 中运行)。你是对的,S1 在代理服务器后面。如果我删除此代理服务器,我可以成功访问 Web 服务。代码在“附加信息”部分提供。我的问题是,当我有代理服务器时。我在访问网络服务时遇到了麻烦。
标签: node.js ember.js proxy node-http-proxy webproxy