デプロイされた API を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 にヒットし、「/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 でヒットしていないため、データが欠落しています。
どんな助けでも大歓迎です。