express 不设置托管静态资源时,index.html文件找不到<script>标签引用的src下的目录
发布于 3 个月前 作者 rookiebird 445 次浏览 来自 问答

各位前辈 我刚开始学express,知道一般的express都有这一句,用来托管静态资源,我于是产生了两个问题 对于这句 app.use(express.static(path.join(__dirname, ‘public’))); 我从github中查了下它的大概作用,我 的理解是这样的 比如我在view这个文件下的index.html想请求一个public/javascripts下的jquery.js这个文件,我只用写 < script src=“javascripts/jquery.js”>而不是< script src="…/public/javascripts/jquery.js> 因为我的中间件会自动把req.url和我前面设置的静态资源的路径合起来,找到我这个js文件。 这么理解对嘛? 然后我不设置静态资源,直接将index.html和jquery.js和app.js这三个文件放在我创建的express文件下 我在app.js设置路由,监听的是3000端口 app.get(’/’,function(req,res){ res.sendFile(__dirname +’/index.html’) ; }); 等我访问localhost:3000时,就会加载index.html页面,但是我在index.html包括的js文件,用这句< script src=“jquery.js”>话总是找不到jquery.js,然后我直接点开index.html这个文件,控制台又不报错,我真的是感觉莫名其妙…, 难道是 res.sendFile(__dirname +’/index.html’) ;只发送index页面,而不发送jquery.js文件吗?但是我设置静态目录的时候 还是能成功找到jquery.js的,请问我是不是文件路径写错了?? 下图是我的express文件夹下的目录

gg.png

6 回复

换成 <script src="./jquery.js">试试

express不设静态资源,就要对静态资源的请求进行处理,<script src="jquery.js">,其实就是一个‘/jquery.js’路径的请求,很明显你是没有做处理的,所以会找不到文件。

@canhongpoxiao 这个我试过 不行的,而且超奇怪 我换成绝对路径,它告诉我不能直接访问本地文件…我不都是从服务器访问的了吗…

@foora 就是说不设置静态资源,它就不会自动发送jquery.js,设置了它就会把jquery.js当成静态资源发送对吗?

@rookiebird 对,不设置静态资源的话,你要获得jquery.js就需要再起一条/jquery.js路由,路由返回jquery.js文件。

URL(Uniform Resource Locator),即统一资源定位符,普通对应硬盘的某个文件数据。拿Express来说,没有设置静态路径,意味着没有任何http url指向资源jquery.js,服务器匹配完其他路由,还是匹配不到你要的资源,404(有些服务器不同,放在根目录下就可以直接访问,比如nginx等,应该是有处理)。可以自己来写,比如正则匹配路径,符合静态资源路径,简单点的把文件stream.pip出去就好了

回到顶部