Javascript 节点、ExpressJS、vhost-运行多个应用程序

Javascript 节点、ExpressJS、vhost-运行多个应用程序,javascript,node.js,express,Javascript,Node.js,Express,我想使用Node/ExpressJS为多个应用提供服务,我来自IIS背景。我遇到的问题是重新启动单个应用程序,而不是重新启动所有应用程序 在IIS中,我只需单击应用程序(在“站点”列表中),然后单击重新启动,这将只重新启动该应用程序,其他所有应用程序都将启动并运行 这就是我所拥有的 服务器: // index.js require('console.table'); var _ = require('underscore-contrib'); var express = require('e

我想使用Node/ExpressJS为多个应用提供服务,我来自IIS背景。我遇到的问题是重新启动单个应用程序,而不是重新启动所有应用程序

在IIS中,我只需单击应用程序(在“站点”列表中),然后单击重新启动,这将只重新启动该应用程序,其他所有应用程序都将启动并运行

这就是我所拥有的

服务器:

// index.js

require('console.table');

var _ = require('underscore-contrib');
var express = require('express');
var vhost = require('vhost')

var app = express();

var config = require("./config.json");

var websitesStart = function(website){
    if (website.live) {
        var host = vhost(website.domain, require(website.folder))
        app.use(host);
    }
}

_.each(config.websites, websitesStart);

app.listen(config.port, function(){
    console.log('Web Server Running, Port:' + config.port);
    console.table(config.websites);
});
配置:

// config.json
{
    "port": "8080",
    "websites": [
        {
            "name": "App 1",
            "live": "true",
            "domain": "app1.uk",
            "folder": "../apps/app1"
        },{
            "name": "App 2",
            "live": "true",
            "domain": "app2.uk",
            "folder": "../apps/app2"
        },{
            "name": "App 3",
            "live": "true",
            "domain": "app3.uk",
            "folder": "../apps/app3"
        }
    ]
}
运行
node index.js
可以启动我所有的应用程序

例如,如果我更改了应用程序2中的某些代码,我将如何仅重新启动该应用程序。。?让应用程序1和3继续运行

更新:我运行的是Windows操作系统,所以PM2不是一个真正的选项,因为它只是测试版

更新2我真的很想在端口80上运行所有应用程序,就像在IIS中一样。如果我将每个应用程序作为不同的ExpressJS应用程序运行(将它们作为单独的进程/服务运行),我不需要使用不同的端口吗?

您可以用于进程管理。 只需在package.json中描述您的应用程序,然后像这样启动它们:

./node_modules/.bin/pm2 start package.json
使用此选项重新启动一个应用程序后:

./node_modules/.bin/pm2 restart  <app_name|id|'all'|json_conf>
/node\u modules/.bin/pm2重启

所以你根本不需要“websitesStart”功能。

谢谢,但我使用的是Windows(对不起,我应该这么说),我已经看过PM2了,它只是测试版。我需要一些可以在生产环境中运行的应用程序。因此,根据您的回答,我猜您建议在单独的ExpressJS应用程序中运行我的应用程序,并使用某种流程/服务管理器。。?我想我只是想模仿IIS。只是想一想——如果我有多个ExpressJS应用程序作为单独的服务运行,每个应用程序一个,它们不都需要不同的端口吗。。?我真的希望所有的应用程序都能在80端口上运行…@CrusaderLtd是的,我认为最好将它们分离到不同的进程中,使它们更加独立。如果您将有一些未处理的错误,您将只重新启动一个应用程序以避免资源泄漏,但所有其他应用程序都不会崩溃。我还可以建议您使用Nginx进行静态文件传递(客户端js、css、img),这样您也可以在Nginx配置中绑定端口,比如:app1.uk:80->localhost:3000 app2.uk:80->localhost:3001当然,最好最简单的解决方案就是在生产服务器上使用linux。您想过使用Nginx吗?nginx有一个反向代理的概念,它可以帮助实现这一点。我刚刚查看了网站。在“测试的操作系统和平台”下面写着“WindowsXP,WindowsServer2003”。我们正在运行服务器2012。老实说,这感觉像是Linux的东西,而我希望在Windows上使用Node/Express。了解,但值得选择此选项。Nginx非常健壮,可以很好地与node和express结合。我在Linux和Windows服务器中使用