javascript - Node.js 忽略站点根目录的获取处理程序
问题描述
我有一个 Node.js 服务器,其设置简化如下:
const express = require('express');
const app = express();
const http = require("http");
const path = require('path');
const favicon = require('serve-favicon');
// Files in public are static
app.use(express.static(path.resolve('./public')));
// Serve icon
app.use(favicon(path.resolve('./public', 'Pictures', 'favicon.ico')));
http.createServer(app, function(req, res) {
res.writeHead(200);
res.end('Hello world');
}).listen();
app.get('/', function(req, res) {
let b = someFunction();
if(b){
res.redirect('/option/one');
}
else{
res.redirect('option/two');
}
})
我在网络托管服务上运行它,当我访问我的网站时,例如www.myDomain.com,我想要重定向到 myDomain.com/option/one 或 myDomain.com/option/two。然而,发生的事情是 myDomain.com 使用我的“公共”目录中的 index.html 进行响应,并且不会重定向我。
我发现如果我删除这两行就不会发生这种情况
// Files in public are static
app.use(express.static(path.resolve('./public')));
// Serve icon
app.use(favicon(path.resolve('./public', 'Pictures', 'favicon.ico')));
然而,仅仅删除它们并不是一个好的解决方案,因为 public 包含许多文件(javascript、样式表、html、图片等),这些文件相互需要,并且为每个文件制作一个 node.js 获取处理程序似乎是次优的解决方案. 我该如何解决?
解决方案
要解决此问题,您可以执行此操作。这会将默认设置为 false。
app.use(express.static(path.resolve('./public'), {
index: false
}));
另一种方法是更改代码的顺序。放在
app.use(express.static(path.resolve('./public')));
/get 函数之后。
推荐阅读
- python - 如何在python中引发错误时删除附加文本
- r - 为什么我在使用带有 count 功能的 write.csv 时会得到一个凌乱的 csv?
- r - 如何修复“未指定 scattergeo 模式:将模式设置为标记”错误消息?
- flutter - Flutter 应用程序无法在 iOS 15.0 模拟器上构建,但可以在 iOS 13.0 上的真 iPhone 上运行
- stm32 - PDM_Filter() STM32 中错误的 1st 2 PCM 转换数据
- python - Scikitlearn GridSearchCV 最佳模型分数
- jvm - jvm崩溃看起来像是由JIT引起的
- python-3.x - Python继承:为什么Folder类继承自File类
- c - 子进程未从共享内存打印
- javascript - TypeError:undefined is not an object (evaluate 'this.haderHomepage.animateIntro') on Macos Big sur