node.js - 节点、Express JS、404 响应仅在已部署站点上的所有新添加的路由上
问题描述
我的应用程序是使用 node 和 express 创建的,并托管在使用 NGINX 作为反向代理的数字海洋 VPS 上,运行 Ubuntu 20.04。当我第一次将它部署到上述 VPS 时,一切都运行良好,但是当我开始向我的服务器应用程序添加新路由时,当我测试它们但当我在 VPS 上部署(更新 repo)时,它们会在本地主机上完美运行部署的站点将以错误 404 响应所有新路由,无论是发布请求还是获取请求..虽然旧路由会继续正常工作..我收到的错误消息是标准快速错误
Cannot GET /route
我检查了我的节点服务器文件,我看到它是最新的,它应该可以很好地路由一切,但它没有......我试图更改 nginx 配置,我尝试更改工作服务器上的节点版本绝望,但根本不接受新的溃败
我的节点代码:
let express = require("express");
const mongoose = require('mongoose');
let hbs = require("express-handlebars");
let app = express();
const omnirouter=require("./omnirouter")
const dbURI = "mongodb stuff";
mongoose.set('useNewUrlParser', true);
mongoose.set('useUnifiedTopology', true);
mongoose.set('useFindAndModify', false);
mongoose.connect(dbURI).then((result) => {
app.listen(3000, () => {
console.log("connected");
})
}).catch((err) => {
console.log(err);
});
//JSON Parser
app.use(express.json());
//static files
app.use("/assets", express.static('assets'));
app.use("/scripts", express.static('scripts'));
app.use("/styles", express.static('styles'));
//view engine
app.engine('hbs', hbs({
runtimeOptions: {
allowProtoPropertiesByDefault: true,
allowProtoMethodsByDefault: true
},
defaultLayout: "",
layoutsDir: "",
}));
app.set("views", __dirname);
app.set("view engine", "hbs");
//route handling
app.use(omnirouter)
我的 nginx 配置(我更改了多次,这就是现在服务器上存在的内容)
server {
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name domain.com www.domain.com;
location / {
proxy_pass http://localhost:3000/; #whatever port your app runs>
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
}
server {
if ($host = www.domain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = domain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80 default_server;
listen [::]:80 default_server;
server_name domain.com www.domain.com;
return 404; # managed by Certbot
}
解决方案
已修复..问题不在于 nginx 或节点 js..我使用 pm2 将我的节点应用程序作为后台进程运行..我不知道每当我对服务器软件进行更改时我都必须重新启动服务我曾经离线做。
如果有人忘记这样做,那将值得一试。
pm2 restart app.js
推荐阅读
- dart - 如何在 Dart 中将 Class 对象转换为数据结构“地图”或“地图列表”?
- ios - MPSCNNConvolution 在施工中崩溃
- c++ - 推回功能的容量问题
- user-interface - 是否可以在没有对象大小的情况下计算每度视角的点数?
- reactjs - 使用 ReactRouter nas PHP 托管进行反应
- performance - Spring JPA 在 postgres 数据库中插入数据需要太多时间和内存
- python - 使用用户的输入在 excel 文件中搜索特定行(python)
- javascript - React Native中VirtualzedList更新慢时返回的对象含义
- php - 以逗号分隔的字符串拆分并在 MySQL 和 PHP 中显示
- python - 具有多个迭代器的 Python 多处理部分池