Express默认渲染首页疑问:未写通配路由却加载index.html
为什么没写通配符路由,Express仍能自动加载index.html?
你猜的完全正确!这其实是Express的express.static静态文件中间件自带的默认行为,专门帮我们处理静态站点的首页访问场景。
具体原因解析:
当你通过app.use(express.static(__dirname + '/publimc'))把publimc文件夹设置为静态资源目录时,这个中间件默认会开启**目录索引(index)**功能:
- 它的默认配置里,
index选项值是['index.html', 'index.htm']; - 当用户访问一个目录路径(比如你的服务器根路径
/),中间件会自动在静态目录下查找列表里的文件名; - 如果找到匹配的文件(比如你
publimc根目录下的index.html),就会自动把这个文件发送给客户端,完全不需要你额外编写app.get('*', ...)这样的路由。
验证或修改这个行为的方法:
- 验证默认行为:把
publimc里的index.html改个名字(比如home.html),再访问根路径,就会发现页面无法自动加载了; - 自定义首页文件名:如果想把其他文件设为默认首页,可以手动配置
index选项:
app.use(express.static(__dirname + '/publimc', { index: 'home.html' // 现在访问目录时会优先找home.html }));
- 关闭自动索引:如果不想让中间件自动处理目录访问,可以把
index设为false,这时候访问目录会返回403(禁止访问):
app.use(express.static(__dirname + '/publimc', { index: false }));
结合你的代码来看:
你的服务端代码里已经通过app.use(express.static(__dirname + '/publimc'))启用了静态服务,并且publimc目录下刚好存在index.html,所以当你访问http://localhost:8000/时,中间件就自动帮你返回了这个文件,省去了手动写路由的麻烦。
内容的提问来源于stack exchange,提问作者user5740953
相关产品推荐
相关产品推荐

