0
点赞
收藏
分享

微信扫一扫

Express 细节探究——app.use(express.static)

深夜瞎琢磨 2021-09-30 阅读 93

相信每个人都会用到这个方法:

特别注意: public 前面一定要加上 " / " 这个表示路径的符号。 而且 dirname 前面是两个短划线。

你肯定在你的app文件中这么用过它:


正如注释中写的那样,这句话的意思是,将静态文件目录设置为:项目根目录+ public。

app.use 的理解

app.use在express中被看成是消息中间件 middleware

app.use(express.static(__dirname + '/public'));
app.use(logger());
app.use(function(req, res){
  res.send('Hello');
});

每一个请求都会到 app.use 里面过一遍。

app.use(express.static(XX)) 的另一种写法

当然,你也可以这样写:

引用 path 模块的 join 方法,其作用与前面的那行代码是等价的,注意,这里要引入 path 模块。

那么,为什么要引入静态资源文件呢? 其目的是为了设置一个可供浏览器访问的目录。 只有这个目录下的文件,浏览器才能访问到。

细究起来, 为什么以上这行代码能够帮我们设置静态资源文件呢? 它到底做了些什么呢?

静态资源文件,通俗地可以理解为,对于不同的用户来说,内容都不会变化的文件。这些资源文件包括: 你看到的图片、CSS文件、和前端的 javascript文件。

app.use ([paht,] function [, function ...] ) 是用来注册中间件函数的。

通过 app.use(express.static(__dirname + 'public')),可以将所有请求,先交给express.static(__dirname + 'public')来处理一下。
虽然我们暂时不知道express.static()的处理细节,但是这不影响我们做出一些推测,最起码我们可以知道,express.static()的返回值肯定是一个函数。

此时,你就可以通过浏览器访问 public 目录下的文件了:

我们注意到, URL中没有包含 public 路径, 这是为什么呢?

为了给静态资源文件创建一个虚拟的文件前缀(实际上文件系统中并不存在) ,可以使用 express.static 函数指定一个虚拟的静态目录,就像下面这样:

现在你可以使用 /static 作为前缀来加载 public 文件夹下的文件了。

对 __dirname 的疑惑

有时候, 不用 __dirname 也是可以的,比如:

你可以认为, __dirname 表示一个绝对路径, 如果你在其他的文件夹中启动 express app,更稳妥的方式是使用静态资源文件夹的绝对路径:

如何理解 __dirname?

小结

在基于 node.js 全栈开发中, 很多用法是约定俗称的。 当然,你可以按照自己的意向来改动, 但这样一改,如果对套路不是很清楚, 就给自己挖了一个“坑”。 建议初学者还是按照约定的风格编写代码,以免造成不必要的麻烦。 作为开发工程师,要把精力集中在产品的业务逻辑上,而不是纠结代码本身。


参考书: 《 全栈开发之道:MongoDB+Express+AngularJS+Node.js 》

举报

相关推荐

0 条评论