我有一个应用程序在本地开发中正常运行,但当我部署它(Ubuntu 21.x服务器(时,我运行node/pm2-start(甚至安装了nodemon来尝试(,我会得到404错误(不是我的404页面(。这就是我登录到服务器后部署它的方式:
sudo apt update
sudo apt upgrade
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs
git clone (repo)
cd (repo)
npm install
然后我用运行它
node app.js
//or
pm2 start app.js
//even using nodemon
nodemon app.js
我安装了Nginx,当我提到IP地址时,我得到了他们欢迎的HTML,但当我去项目端口3000 时,我收到了404
这是我的服务器代码,除了POST请求:
const express = require('express');
const helmet = require('helmet');
const compression = require('compression');
const bodyParser = require('body-parser');
// express app
const app = express();
app.use(helmet);
app.use(compression());
// bodyparser middleware
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
// listen for request
app.listen(process.env.PORT || 3000);
// miidleware static files
app.use(express.static('public'));
app.use(express.static('script'));
app.get('/', (req, res) => {
res.sendFile('./views/index.html', { root: __dirname });
});
app.use((req, res) => {
res.status(404).sendFile('./views/404.html', { root: __dirname });
});
花了大约12天的时间尝试,所以非常感谢您的帮助。
您部署的服务器似乎有一个开放的端口80,但没有端口3000。
如果你想通过端口3000访问你的express应用程序,你需要在Ubuntu服务器上打开端口。如何做到这一点取决于大量的变量,从服务器的位置到您使用的防火墙。
如果你想做的是让Nginx在端口80上显示你的express应用程序,你需要使用Nginx创建一个反向代理。
要做到这一点,请在此处阅读。我们有太多的变量来帮助进一步