Node.js Express静态资源配置疑问:地址栏路径与多目录可行性
嘿,我来帮你把这些疑问一一拆解清楚:
为什么地址栏显示localhost/test.html而非localhost/public/test.html?
这是因为express.static的作用是把你指定的目录映射为网站的静态资源根路径。当你写app.use(express.static(__dirname + '/public'))时,就相当于告诉Express:“所有访问根路径/的静态资源请求,都去public目录里找对应的文件”。
所以当你输入localhost/test.html,Express会自动去public目录下查找test.html文件,自然不需要在地址栏里写public。这确实和PHP里的htdocs//var/www/html逻辑类似——你可以通过配置来控制URL路径和实际项目目录的映射关系,不是完全不受结构限制,而是通过静态目录映射来实现URL路径的自定义。
app.use是不是仅为一次性根目录声明?
当然不是!app.use是Express里用来挂载中间件的方法,它非常灵活:
- 如果你不指定挂载路径(比如你原来的写法),默认是挂载到根路径
/,此时public就成了默认的静态资源根目录; - 你还可以给它指定自定义挂载路径,比如:
这时你就得通过app.use('/static', express.static(__dirname + '/public'));localhost/static/test.html才能访问到public目录里的test.html文件。
所以app.use不仅不是一次性的,还能通过挂载路径实现多目录的不同URL映射。
能不能同时配置两个静态目录?
完全可以!比如你写:
app.use(express.static(__dirname + '/public')); app.use(express.static(__dirname + '/public/folder'));
Express会按照你写的顺序依次在这些目录里查找请求的文件。举个例子:如果public和public/folder里都有一个test.html,那么访问localhost/test.html时,会返回public目录里的那个(因为它被先配置,优先级更高)。
不过这里要提一句:其实这种配置有点冗余,因为public目录已经包含了folder子目录,你直接通过第一个配置就能访问public/folder里的文件(比如localhost/folder/test.html对应public/folder/test.html)。但如果你想把public/folder里的文件直接映射到根路径(比如localhost/test.html对应public/folder/test.html),那这种顺序配置是可行的,只是要注意优先级问题。
内容的提问来源于stack exchange,提问作者user9644796

