1

我正在尝试在与我的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 上命中。

任何帮助将不胜感激。

4

2 回答 2

2

原来这是我的 Expressserver.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 路由器控制。

于 2014-06-25T16:48:10.887 回答
0

您是否从浏览器中检查了端口 3000 和 5000 是否可以访问?

因为您使用的是代理通行证,所以我认为这些端口未打开。而且由于 Angular 是在客户端运行的,如果 5000 端口关闭,它将永远无法连接到 api。

于 2014-05-21T18:52:34.597 回答