首页 > 解决方案 > 节点、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
}


标签: node.jsexpressnginxdigital-ocean

解决方案


已修复..问题不在于 nginx 或节点 js..我使用 pm2 将我的节点应用程序作为后台进程运行..我不知道每当我对服务器软件进行更改时我都必须重新启动服务我曾经离线做。

如果有人忘记这样做,那将值得一试。

pm2 restart app.js

推荐阅读