cPanel (Apache) 上的 Phusion Passenger "Cannot GET" (Express);相同的代码适用于 localhost 和 Heroku

Phusion Passenger on cPanel (Apache) "Cannot GET" (Express); the same code works on localhost and Heroku

我的 Nodejs 应用程序在本地主机和 Heroku 上运行良好,但在使用 Phusion Passenger (CloudLinux) 托管的 cPanel 上运行失败。

当我查看 node_modules 文件夹时,express 就在那里。

有谁知道如何启动我的应用程序 运行?

这是错误日志:

App 1268608 output: internal/modules/cjs/loader.js:775
App 1268608 output:     throw err;
App 1268608 output:     ^
App 1268608 output: 
App 1268608 output: Error: Cannot find module 'express'
App 1268608 output: Require stack:
App 1268608 output: - /home/futur/w2/server.js
App 1268608 output: - /opt/passenger-5.3.7-9.el7.cloudlinux/src/helper-scripts/node-loader.js
App 1268608 output:     at Function.Module._resolveFilename (internal/modules/cjs/loader.js:772:15)
App 1268608 output:     at Function.Module._load (internal/modules/cjs/loader.js:677:27)
App 1268608 output:     at Module.require (internal/modules/cjs/loader.js:830:19)
App 1268608 output:     at Module.require (/opt/passenger-5.3.7-9.el7.cloudlinux/src/helper-scripts/node-loader.js:80:25)
App 1268608 output:     at require (internal/modules/cjs/helpers.js:68:18)
App 1268608 output:     at Object.<anonymous> (/home/futur/w2/server.js:1:17)
App 1268608 output:     at Module._compile (internal/modules/cjs/loader.js:936:30)
App 1268608 output:     at Object.Module._extensions..js (internal/modules/cjs/loader.js:947:10)
App 1268608 output:     at Module.load (internal/modules/cjs/loader.js:790:32)
App 1268608 output:     at Function.Module._load (internal/modules/cjs/loader.js:703:12) {
App 1268608 output:   code: 'MODULE_NOT_FOUND',
App 1268608 output:   requireStack: [
App 1268608 output:     '/home/futur/w2/server.js',
App 1268608 output:     '/opt/passenger-5.3.7-9.el7.cloudlinux/src/helper-scripts/node-loader.js'
App 1268608 output:   ]
App 1268608 output: }
App 1271723 output: app is running on port 3002
App 1400344 output: app is running on port 3002 ```

我解决了这个问题 - Phusion Passenger 的问题是根路径不是“/”,而是“/yourAppURL”(在我的例子中是“/w2”(https://futuristicon.com/w2/).

真的很奇怪,因为 root 与所有其他环境都是“/”(正如我在问题中提到的 - 应用程序在 Heroku 和 localhost env 上完美运行)。

重要提示:除 root 之外的其他路由无法开箱即用。由于某种原因,您必须在 .htaccess 所在的文件夹中手动创建一个与路由参数同名的空文件夹。

例如,如果您想制作这样的路线:

app.get('/w2/signup', (req, res) => {
res.send('Signup!')
})  

您必须创建一个名为 signup 的新文件夹(不是应用程序根文件夹,而是您的应用 URL 的文件夹)