我正在尝试在与我的AngularJS应用程序相同的服务器上运行已部署的 API ,但已部署的 API 似乎与应用程序路由冲突。
我部署的服务器正在侦听端口 5000,如下所示:
var deployd = require('deployd');
var server = deployd({
port: process.env.PORT || 5000,
env: 'production',
db: {
host: 'localhost',
port: 27017,
name: 'deployd',
credentials: {
username: 'myUsername',
password: 'myPassword'
}
}
});
server.listen();
server.on('listening', function() {
console.log("Server is listening");
});
server.on('error', function(err) {
console.error(err);
process.nextTick(function() { // Give the server a chance to return an error
process.exit();
});
});
我的 AngularJS 应用程序节点服务器正在侦听端口 3000,如下所示:
var express = require('express');
var app = express();
app.use(express.static(__dirname + '/public'));
app.listen(process.env.PORT || 3000);
该应用程序加载正常,尽管在进行这样的调用时它没有按预期访问 API:
$http.get('localhost:5000/foo')
或这个:
$http.get('http://my.public.ip.address:5000/foo')
而且我的页面路由(在 HTML5 模式下,URL 中没有 #)被部署劫持 - 因此 AngularJS 为“/foo”路由的 URL 正在访问 API 并返回“无法获取 /foo”。
这一切都发生在同样运行 Apache 的服务器上,但它被配置为使用以下方式将我的域的请求转发到端口 3000:
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName my.domain.com
ProxyPreserveHost on
ProxyPass / http://localhost:3000/
<Location />
Order allow,deny
Allow from all
</Location>
</VirtualHost>
如果我在 URL 中使用 #,这样http://my.domain.com/#/foo
将返回由 AngularJS 路由器指定的页面模板,但它缺少数据,因为 API 没有在端口 5000 上命中。
任何帮助将不胜感激。