在同一台服务器上运行deploy和angular.js应用
Running deployd and angular.js app on the same server
我试图在与AngularJS应用程序相同的服务器上运行部署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并返回"Cannot 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上被击中。
任何帮助都将非常感激。
原来这是我的Express server.js
代码的问题,与部署无关。我一直看到Cannot GET /foo
消息,只是假设部署试图获取资源,但实际上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端口被关闭,它将永远无法连接到api。
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 使用压缩的JavaScript文件(不是运行时压缩)
- Javascript运行php文件,然后下载文件
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- Angularjs代码未在匿名函数中运行
- jquery设置为使用参数运行
- 如何根据时间运行不同的脚本
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- 将文本框链接到由按钮运行的javascript公式
- 为什么不是't运行此Javascript的Chrome
- ng应用程序使脚本无限运行
- 如何在运行时在angular 2中加载外部js脚本
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- JavaScript错误:Microsoft JScript运行时错误:应为对象
- 在终端中运行 JavaScript 时(使用 rhino),如何使用 print() 函数在一行中打印
- 如何使用JS/nightwatchjs并行运行多个测试
- 茉莉花宝石-耙茉莉花:ci dons't运行测试
- 我的HTML按钮没有在Javascript中运行
- 在同一台服务器上运行deploy和angular.js应用