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

Javascript 在同一台服务器上运行deployd和angular.js应用程序,javascript,angularjs,node.js,url-routing,deployd,Javascript,Angularjs,Node.js,Url Routing,Deployd,我试图在与我的应用程序相同的服务器上运行API,但部署的API似乎与应用程序路由冲突 我部署的服务器正在侦听端口5000,如下所示: var deployd = require('deployd'); var server = deployd({ port: process.env.PORT || 5000, env: 'production', db: { host: 'localhost', port: 27017,

我试图在与我的应用程序相同的服务器上运行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();
    });
});
var express = require('express');
var app = express();

app.use(express.static(__dirname + '/public'));

app.listen(process.env.PORT || 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>
AngularJS应用程序的节点服务器正在侦听端口3000,如下所示:

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();
    });
});
var express = require('express');
var app = express();

app.use(express.static(__dirname + '/public'));

app.listen(process.env.PORT || 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>
该应用程序加载良好,但在进行如下调用时,它没有达到预期的API:

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();
    });
});
var express = require('express');
var app = express();

app.use(express.static(__dirname + '/public'));

app.listen(process.env.PORT || 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>
$http.get('localhost:5000/foo')

或者这个:

$http.get('http://my.public.ip.address:5000/foo)

我的页面路由(在HTML5模式下,URL中没有#)被deployd劫持了——因此AngularJS为“/foo”路由的URL命中API并返回“Cannot GET/foo”

这一切都发生在同样运行Apache的服务器上,但该服务器被配置为使用如下方式将我的域请求转发到端口3000:

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();
    });
});
var express = require('express');
var app = express();

app.use(express.static(__dirname + '/public'));

app.listen(process.env.PORT || 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>
NameVirtualHost*:80
服务器管理员webmaster@localhost
ServerName my.domain.com
代理主机
ProxyPass/http://localhost:3000/
命令允许,拒绝
通融
如果我在URL中使用#,比如
http://my.domain.com/#/foo
将返回AngularJS路由器指定的页面模板,但由于端口5000上未命中API,因此缺少数据


任何帮助都将不胜感激

您是否已通过浏览器检查是否可以访问端口3000和5000


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

结果表明,这是我的Express
server.js
代码的问题,与部署无关。我一直看到
无法获取/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路由器控制方向盘。

很可能就是这样,但要到今晚晚些时候才能测试。我写JS的时候就像写服务器端代码一样,故意不向公众开放端口5000,因为我认为我不需要这样做。我通常用Java和PHP编写代码,所以每次都会遇到类似的问题。干杯