我 运行 一个 npm 运行 构建,将它放在 nodejs express.static 上,pm2 启动应用程序但无法获取 '/'

I ran a npm run build, placed it on nodejs express.static, pm2 start app but Cannot GET '/'

我想在 AWS EC2 的一个 Linux 机器上托管 2 个节点应用程序。我可以在哪里 运行 开发环境和暂存环境。我注意到我将不得不在两个应用程序上使用不同的端口,但这不是我面临的问题。

首先使用一直在我启动它的以前的盒子上工作的暂存端,确保它在尝试不同的端口之前工作。

我有一个使用 express 的后端 node.js 和一个使用 Vue CLI 构建的静态网页。 Express 应用程序将使用 app.use(express.static('static')); 托管静态网页的位置。然后使用 pm2 start /directoryToDist/main.js 继续在 PM2 上托管它。守护程序启动后,我执行了 curl http://localhost:80/,但它 return 是 Cannot GET /.

的错误 HTML 页

当我在两个应用程序上执行 npm installnpm rebuildnpm build 时。确保正确构建 dist 文件夹。然后做了一个sudo -ipm2 start /directoryToDist/main.js。确保节点应用程序是 运行ning 我做了一个 ps -ef | grep js 来表明它是 运行ning。 pm2 安装的应用程序没有重新启动,一切都很顺利 运行ning。之后我做了 curl http://localhost/ 它做了 return Cannot GET /.

我在之前的盒子中对一个工作应用程序进行了 zip 文件传输,并进行了必要的 npm 安装和 运行 它。期望它像以前的盒子一样工作,但事实并非如此。显示 Cannot GET /.

的相同错误

节点 js 构建脚本

"build": "rimraf dist/ && babel ./ --out-dir dist/ --ignore ./node_modules,./babelrc,./package.json,/.npm-debug-log,./static/* --copy-files"

Vue js 构建脚本

"build": "node build/build.js"

重建我使用的脚本

cd api
npm run build
cd ..
cd pwa
npm run build
cd ..
sudo rm -rf api/dist/static
sudo mkdir -p api/dist/static
sudo cp -r pwa/dist/* api/dist/static/
sudo chown -R ubuntu.ubuntu *

如果您需要查看更多内容,请告诉我

实际结果是在为特定端口提供域之前在 curl 上提供适当的 200 消息。

找到了有效的解决方案。

Pm2 没有指向当前工作目录。 sudo -i 然后 运行 它 $ pm2 start /home/user/directory 将在 directory 文件夹而不是实现的 dist 文件夹中查找模块路由。

所以通过解决这个问题。必须首先遍历目录并在那里启动 pm2 启动。 $ cd /home/user/directory/dist/ $ pm2 start main.js。这为节点应用程序提供了良好且稳定的服务。

或者你可以用path找到它:

import path from 'path'

app.use(
  '/some-url',
  express.static(path.join(__dirname, '/some/path/on/server'))
)

如果您知道服务器上的确切路径。

相对路径也适用:

app.use(
  '/some-url',
  express.static(path.join(__dirname, '../../some/relative/on/server'))
)