node.js - 使用 nginx 代理在非索引路由上快速创建 404 错误,但不在本地
问题描述
我有一个快速服务器来处理我的路由并使用 nginx 代理我的请求。但是,当访问不是 的路由时'/'
,我收到来自 express 的 404 错误。到目前为止,我已经查看了很多其他答案,它们似乎都是来自 nginx 的 404,并通过删除来解决try_files $uri $uri/ =404;
,但对我来说并非如此。我还看到很多关于使用 express/nginx 的静态文件的 404-ing 的问题,但我认为这里不一定是这种情况。相反,我不确定我的情况与这些问题有何关系,因为我正在通过 pug 和 express 进行模板化。
我得到的错误是:
NotFoundError: Not Found
at /root/my-app/app.js:27:10
at Layer.handle [as handle_request] (/root/my-app/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/root/my-app/node_modules/express/lib/router/index.js:317:13)
at /root/my-app/node_modules/express/lib/router/index.js:284:7
at Function.process_params (/root/my-app/node_modules/express/lib/router/index.js:335:12)
at next (/root/my-app/node_modules/express/lib/router/index.js:275:10)
at /root/my-app/node_modules/express/lib/router/index.js:635:15
at next (/root/my-app/node_modules/express/lib/router/index.js:260:14)
at Function.handle (/root/my-app/node_modules/express/lib/router/index.js:174:3)
at router (/root/my-app/node_modules/express/lib/router/index.js:47:12)
由(在 app.js 中)触发:
app.use((req, res, next) => {
next(createError(404));
});
我的路由器看起来像:
router.get('/', (req, res) => {
res.render('index'); // does not give me 404 error
});
router.get('/other-route', (req, res) => {
res.render('other-route-pug-file'); // gives me 404 error
});
我的 nginx 配置如下所示:
server {
listen 80;
server_name example.com;
rewrite ^/(.*) https://example.com/$1 permanent;
}
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
# ssl config details
server_name example.com www.example.com;
location / {
proxy_pass http://localhost:3000; # the port that my express server is listening to
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
因此,仅当我通过 nginx 将我的应用程序路由到我的域时,才会出现此错误。在本地主机上我可以看到/other-route
很好。我也不确定如何调试这样的事情,因为我不能真正console.log()
轻松地去某个地方,而且我对通过 nginx 进行代理还很陌生,因此非常感谢任何一个领域/解决这个问题的帮助。谢谢!
解决方案
我解决了我的问题。我正在使用一种低效的方法在服务器和 github 上同步我的代码。yarn install
从第一次克隆之后,我没有在我的目录中。我不知道为什么我不只是拉入服务器上的目录。我不一定确定为什么我的项目的其他部分正在工作,但这对我来说是固定的。谢谢您的帮助!
推荐阅读
- bash - 如何在没有 for 循环的情况下复制关联数组
- python - 我可以在 conda 列表中找到 deap,但无法在 python 2.7 中导入名称库
- reactjs - 如何使用 reactjs 正确路由到动态页面?404页面无法访问
- git - 在 vim 的 git commit 消息中添加一个井号/井号作为第一个字符
- python - 遍历 SQLAlchemy 关系 - TypeError 和 backref 问题
- selenium - 如何使用xpath/selenium 中的标题标签访问表
- python-3.x - AttributeError:“dict_values”对象没有属性“get”
- android - Google Lite 地图显示的信息比普通地图多得多
- javascript - 如何将多个 SVG 居中到同一点?
- c++ - 如何在 GDB 中以十六进制打印双精度位?