【问题标题】:I ran a npm run build, placed it on nodejs express.static, pm2 start app but Cannot GET '/'我运行了一个 npm run build,将它放在 nodejs express.static,pm2 start app 但无法 GET '/'
【发布时间】:2020-07-11 02:57:39
【问题描述】:

我想在 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/,但它返回了Cannot GET / 的错误HTML 页面。

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

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

Node 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 消息。

【问题讨论】:

  • 所以你的文件路径位于ROOT/dist/static/*.* ?
  • @MattOestreich 是的 /home/ubuntu/nodeApp/dist/main.js 在 main.js 中有一个 app.use(express.static('static')) 服务于 index.html
  • 我认为它需要是:app.use(express.static('dist')) 在这种情况下.. 取决于您的 Node 应用程序入口点所在的位置..
  • 您的packages.json 文件是什么样的?特别是“主要”?
  • 嗯我以前试过。好吧,我的nodeApp 有一个dist 文件夹,其中包含所有构建文件,然后将其前端static nodeApp 的构建文件放到nodeAppdist 的静态子目录中并运行主目录。 js应用就可以了。

标签: node.js linux vue.js amazon-ec2 pm2


【解决方案1】:

或者你可以通过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'))
)

【讨论】:

    【解决方案2】:

    找到一个有效的解决方案。

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

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

    【讨论】:

      猜你喜欢
      • 2017-10-05
      • 2021-02-01
      • 2019-10-20
      • 2019-11-15
      • 2021-03-26
      • 1970-01-01
      • 2019-11-28
      • 2018-01-21
      • 2020-09-23
      相关资源
      最近更新 更多