如何解决Node、Express JS、404 响应仅在部署站点上的所有新添加的路由上
我的应用程序是使用 node 和 express 创建的,并托管在数字海洋 VPS 上,使用 NGINX 作为反向代理,运行 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。