节点、Express JS、404 响应仅在已部署站点上的所有新添加路由上
Node, Express JS, 404 response on all newly added routes on deployed site only
我的应用程序是使用 node 和 express 创建的,并托管在数字海洋 VPS 上,使用 NGINX 作为反向代理,运行 Ubuntu 20.04。当我第一次将它部署到上述 VPS 时,一切都运行良好,但是当我开始向我的服务器应用程序添加新路由时,当我测试它们时,它们在本地主机上运行得很好,但是当我部署时(更新 repo ) 在 VPS 上,已部署站点将响应所有新路由并返回错误 404,无论是 post 还是获取请求..旧的路由会继续正常工作..我收到的错误消息是标准的表达错误
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
我的应用程序是使用 node 和 express 创建的,并托管在数字海洋 VPS 上,使用 NGINX 作为反向代理,运行 Ubuntu 20.04。当我第一次将它部署到上述 VPS 时,一切都运行良好,但是当我开始向我的服务器应用程序添加新路由时,当我测试它们时,它们在本地主机上运行得很好,但是当我部署时(更新 repo ) 在 VPS 上,已部署站点将响应所有新路由并返回错误 404,无论是 post 还是获取请求..旧的路由会继续正常工作..我收到的错误消息是标准的表达错误
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