angularjs - 第二个 Node 服务器(或端口)不会在生产中启动 (Elastic Beanstalk)

标签 angularjs node.js amazon-web-services nginx amazon-elastic-beanstalk

我有一个正在尝试部署的 Node/Angular 应用程序。它使用两个 Node 服务器:一个主要为应用程序提供服务;另一个用于为应用程序提供服务。另一个是当应用程序请求特定端口时从 API 获取数据,并将该数据存储在本地。

我已经让它在我自己的本地机器上完美运行。但是,当我部署到生产环境(Heroku 或 AWS Elastic Beanstalk)时,我发现第二个脚本无法运行或无法正常启动。最终的结果是,它没有得到我需要的数据。

这是两个脚本;它们都设置为在 package.json 中的“start”下运行:“node main.js & node node-server.js”

ma​​in.js(同样,这个似乎可以很好地为应用程序提供服务):

var express = require('express');
var app = express();
app.use(express.static(__dirname + '/app'));
app.listen(process.env.PORT || 3000);

node-server.js(似乎不起作用;应用程序中没有收集或填充任何数据):

var http = require('http');
var port2 = 1234
var fs = require('fs');

//We need a function which handles requests and send response
function handleRequest(req, res) {
    request.get({
        url: 'http://sample-url.json',
        qs: {
            url: 'http://sampletool/pb/newsletter/?content=true'
        }
    }, function (err, result) {
        res.end(result.body);

        fs.writeFile('app/data.json', result.body, function (err) {
            if (err) return console.log(err);
            console.log('API data > data.json');
        });

    });
}

//Create a server
var server = http.createServer(handleRequest);

//Lets start our server
server.listen(port2, function () {
    //Callback triggered when server is successfully listening. Hurray!
    console.log("Server listening on: http://0.0.0.0:%d", port2);
});

然后,当页面加载时,主 Angular 应用程序会调用此端口 ( http://0.0.0.0:1234 ),以请求新数据。

Elastic Beanstalk 使用的是 nginx,这是我不太熟悉的东西,而且我没有在本地运行它。

在将多个 Node.js 服务器配置为在生产环境中的不同端口上运行时,我是否遗漏了一些重要内容?预先感谢您的帮助。

最佳答案

出于安全原因,云服务提供商通常只允许应用程序从 Node 服务器使用一个端口(动态随机分配给 PORT 环境变量)。阅读 this section从 Heroku 文档了解更多相关信息。

这就是为什么使用 process.env.PORT 的主应用程序 (ma​​in.js) 正在运行,而另一个应用程序 (node-server.js )使用硬编码的 1234 则不然。

This question关于 Heroku 上多个端口的可行性有一些指示(不过,恐怕没有好消息)。

如何解决这个问题,可以尝试的一件事是将其分成两个单独的应用程序,分别使用单独的 package.json 等进行部署。

关于angularjs - 第二个 Node 服务器(或端口)不会在生产中启动 (Elastic Beanstalk),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33024705/

相关文章:

angularjs - PDF Javascript Blob 中的非 UTF-8 字符

javascript - 打开/关闭 div 切换并单击外部 div

amazon-web-services - Amazon Connect、Amazon Direct Connection、AWS 托管 VPN 和 Amazon Connect 之间有什么区别

node.js - 页面刷新时不会触发 React 客户端上的 Socket.io 断开连接

javascript - Node crypto.randomBytes 从函数返回 token

amazon-web-services - 使用 SAM 将 s3 事件触发器添加到我的 lambda 函数时遇到问题

objective-c - 哪种方法更好 : retrieve images from AWS S3 or download it and store locally in a temp folder to be displayed?

javascript - 范围选择不适用于 Microsoft Edge

javascript - 如何将变量值插入for循环数组

javascript - 路由器更改时无法正确呈现页面