Express作为静态服务的URL路径问题

社区广播:运维派(Yunweipai.com)是国内最早成立的IT运维社区,欢迎大家投稿,让运维人不再孤寂的成长!

今天遇到一个问题:

  1. 我使用Express,将两个目录作为静态文件暴露给外部访问:

//product and /home/products are static html, script, jpg files
        app.use(express.static(__dirname + ‘/static’));
        app.use(express.static(process.cwd() + ‘/home/products’));
我的目录结构:
..
|
|_server.js
|
|_static/
| |
| |__product/
|
|_product/
|
|_home/products

  1. 2. 当访问/product这个URL时候,我做了处理,并不是直接访问下面的文件
  2. //product index page
  3. app.get(‘/product’, getIndexSmapleHTML);
  4. 在indexSampleHTML中,我增加了脚本,会去向服务器请求图片,并使用jQuery插入带<img>标签的HTML元素的(img的src是相对另外一个静态目录的地址),发现找不到图片。
  5. 4. 问题是,img src所指的图片找不到。但是我另外一个URL:/pi ,也是同样的img和src,却可以访问。

刚开始我怀疑是我的img src中带中文导致的,但是 /pi 的地址可以访问,那么就不是中文的问题。

我比较两个URL,发现他们不一样:
正常访问的URL:http://localhost/7E%%9C%35/556.jpg
而有问题的URL:http://localhost/product/7E%%9C%35/556.jpg

多了一个product在路径中。

我大概明白了,http://localhost/product 是一个静态目录,那么在这个URL下的请求,都是相对于/product这个根路径的。因为我没有/pi的静态目录,所以没问题了。

所以,Express里面,在使用静态目录的时候,要注意这个特性:静态目录URL下的请求的相对URL,都是相对应于此静态目录的,而不能跳出。

我解决这个问题的方法,就是删除掉/product目录。

网友评论comments

发表评论

电子邮件地址不会被公开。 必填项已用*标注

  1. 这个要了解下了

  2. 英雄联盟说道:

    学习了!感谢博主!

  3. 中华娱乐城说道:

    这个我还真学不会啊…

  4. walfred说道:

    刨根问底,这就是一种进步和能力啊

  5. 莫小雅博客说道:

    既然来了,就留个言吧。努力成为博主的忠实粉丝。

Copyright © 2012-2017 YUNWEIPAI.COM - 运维派 - 粤ICP备14090526号-3
扫二维码
扫二维码
返回顶部