我正在尝试在与deployd应用相同的服务器上运行AngularJS API,但deployd似乎与应用路由冲突。
我的deployd服务器正在侦听端口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中没有#)被deployd劫持 - 因此AngularJS为'/ foo'路由的URL正在访问API并返回“Can not GET / 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上被点击。
非常感谢任何帮助。
答案 0 :(得分:2)
原来这是我的Express server.js
代码的问题,与Deployd无关。我一直看到Cannot GET /foo
消息,只是假设Deployd正在尝试获取资源,但实际上Express没有加载index.html(它加载AngularJS和我的路由代码),因为它只是试图加载静态而是名为foo
的文件。
这是我固定的server.js
:
var express = require('express');
var app = express();
app.use(express.static(__dirname + '/public'));
app.use(function(req, res) {
res.sendfile(__dirname + '/public/index.html');
});
app.listen(process.env.PORT || 3000);
现在,如果静态文件foo
不存在,它会加载index.html
并允许我的AngularJS路由器开启。
答案 1 :(得分:0)
您是否从浏览器检查过端口3000以及5000是否可以访问?
因为您正在使用代理传递,所以我认为这些端口未打开。因为angular是在客户端运行的,所以如果5000端口关闭,它将永远无法连接到api。