在同一台服务器上运行deployd和angular.js应用程序

我试图在我的AngularJS应用程序所在的服务器上运行deployd 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); 

该应用加载罚款,虽然它没有按预期的打电话,如下所示:

$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的服务器上,但是configuration为使用类似下面的方式将对我的域的请求转发到端口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路由器规定的页面模板,但是它缺less数据,因为API不在端口5000上。

任何帮助将不胜感激。

原来,这是我的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路由器转动。

你有检查,从一个浏览器端口3000以及5000是可及的?

因为你使用代理传递,所以我认为这些端口没有打开。 而且由于angular度是运行在客户端,如果5000端口closures,它将永远无法连接到api。