如何让 Openshift 使用 Express 4,而不是其安装的 Express 3?

How do I make Openshift to use Express 4, instead of its installed Express 3?

我使用 Express 4 在本地开发了我的 Nodejs Express 应用程序,它在我的计算机上按预期运行。然后我 git 整个应用程序到 Openshift。当我尝试 运行 它 Openshift returns“503 服务不可用”。如果我通过 ssh 进入我的基本节点盒并执行 "express -V" 它 returns 版本 3.2.5。如果我在 app-root/repo 和 运行 "express -V" 进入我的应用程序文件夹,我会得到相同的版本 3.2.5。

很明显我的 Express 4 没有被使用,它包含在我的应用 node_modules 的 git 上传中。我的应用要求使用 Express 4 的解决方案是什么?

想法是 - 删除 Openshift 的 Express 3 版本,强制 Openshift 在我的应用程序区域中使用我的 Express 4,将 Openshift 的 Express 3 升级到 Express 4。我不知道如何做这些,我已经研究了这个.

以下是问题排查方法:

  • ssh 进入您的卡带
  • cd 进入 app-root/repo 目录
  • 运行 grep version ./node_modules/express/package.json
  • 您应该会看到一个基于您的 package.json 依赖项的版本
  • 验证您的 package.json 有一个 scripts 部分包含一个 start 命令,该命令只是 运行 您的应用程序带有 node ./server.js (server.js 是您在其中编写主应用程序启动脚本的任何文件)。您不需要 express 命令行程序来启动快速服务器。它用于设置新项目样板和其他辅助任务。
  • 要在您的应用中查看 express 运行ning 的版本,您可以将此代码添加到您的 server.js(或等效文件):console.log(require("express/package").version);

试试这个

rhc ssh
cd app-root/repo
npm 开始

同时编辑 ./bin/www

var port = normalizePort(process.env.OPENSHIFT_NODEJS_PORT || '8080'); 
var ip = process.env.OPENSHIFT_NODEJS_IP;
        if (typeof ip === "undefined") {
            //  Log errors on OpenShift but continue w/ 127.0.0.1 - this
            //  allows us to run/test the app locally.
            console.warn('No OPENSHIFT_NODEJS_IP var, using 127.0.0.1');
            ip = "127.0.0.1";
        };
//app.set('ip', port);  
app.set('port', port);

var server = http.createServer(app);

server.listen(port, ip);
server.on('error', onError);
server.on('listening', onListening);

查看这个项目,了解如何将 openshift 与 express4 集成 这是一个简单的例子。

https://github.com/master-atul/openshift-express4

您可以按照以下步骤操作:

  1. 复制所有内容bin/www并替换文件server.js中的所有内容:

  2. 更改server.js处的一些内容:

来自

`var port = normalizePort(process.env.PORT || '3000');`

var port = normalizePort(process.env.OPENSHIFT_NODEJS_PORT || '3000');

添加行:

var ip = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1';

来自

server.listen(port);

server.listen(port, ip);
  1. 添加更多 package.json

来自

"scripts": {
    "start": "node bin/www"
},

"scripts": {
    "start": "node server.js"
}, 

添加行:

"main": "server.js",
  1. npm install --save module-name用于npm install

  2. 创建内容为 .gitignore 的文件:

    node_modules

  3. 在本地 运行 node server.js 启动地址为 localhost:3000

  4. 的服务器
  5. 上传到 openshift:

    git add . git commit -m "First update new server version" git push

  6. 浏览器:domain-appname.rhcloud.com