Node.js + Express如何路由到上级目录的assets文件夹?
问题解决方法
你的问题出在express.static的使用方式上,参数顺序和路径处理都有误:
错误原因
app.use(URL前缀, express.static(实际文件目录的绝对路径))是正确用法,你把两个参数搞反了:
- 原代码里第一个参数写了assets文件夹的绝对路径,这会被当成URL前缀,导致你访问的
/assets和这个前缀不匹配 - 第二个参数传的相对路径
assets是相对于Node.js的启动目录,不是当前文件目录,所以找不到资源
修正后的代码
把assets的静态资源配置改成下面这样:
function definirGrid(numeroDeCartas = 12){ console.log('hei') const express = require('express'); const bodyParser = require('body-parser'); const path = require('path'); const app = express(); const PORT = 3001; // 推荐:testedir也改成绝对路径写法,避免启动目录变化导致失效 const testedirPath = path.join(__dirname, 'testedir'); app.use('/testedir', express.static(testedirPath)); // 正确配置assets的静态资源路由 const assetsPath = path.join(__dirname, '..', 'assets'); app.use('/assets', express.static(assetsPath)); app.get('/',(req, res)=>{ res.send('hello world'); }); app.get('/sobre',(req, res)=>{ res.send('página sobre'); }); app.listen(PORT, ()=>{ console.log('app listening on port',PORT) }) } definirGrid()
解释
__dirname代表当前Gamegrid.js文件所在的目录(即src/components/)path.join(__dirname, '..', 'assets')会拼接出src/assets/的绝对路径,这是图片实际存放的位置app.use('/assets', express.static(assetsPath))表示:当用户访问/assets/xxx路径时,Express会去assetsPath对应的目录里找对应的文件
这样修改后,你就能正常访问http://localhost:3001/assets/02.jpg了。
内容的提问来源于stack exchange,提问作者Milteven
相关产品推荐
相关产品推荐

