这节课讨论如何伺服静态文件
与中间件
讨论中间件之前,我们先做一个快速试验,之前创建的 index.ejs
视图文件里会有外部样式的引用,指向根目录下的 assets
, 按理说页面应能正常渲染。
但启动服务后,在控制台上实际会出现 404 找不到 style.css,为什么会这样?
因为归根结底,这是向服务器发起请求获取 style.css
,而我们之前写的程序并没有针对此类静态文件进行响应,这种文件的处理实际跟之前路由部分的处理相似。
我们可以继续按之前的路由处理方式,为不同的静态文件创建处理函数,但更为快捷的方式去伺服这类静态文件。
幸运的是,我们可以使用中间件(如 express 内置的中间件),首先我们聊聊什么是中间件
中间件是在请求与响应中间所运行的代码,实际上我们已经在使用中间件:
app.get('/profile/:id', function(req, resp){
console.log('请求后');
console.log('中间件代码...');
console.log('响应前');
resp.send('request ID is ' + request.params.id);
});
我们将开始使用自定义
或者 express 内置提供的中间件
来伺服静态文件,不需要像路由那样为每个静态文件逐个添加处理函数。
当请求资源为 /assets
,则该中间件会被触发,同样有请求与响应的参数,还有 next
用来告诉 express 可以进入下一个中间件
app.use('/assets', function(req, resp, next){
console.log(req.url); // 这里可以获取客户端访问的请求,就可以针对文件进行处理
next();
});
更幸运的是 express 提供了内置中间件 express.static
来处理静态文件,里面的参数则是项目中静态文件所在的目录
var express = require('express');
app.use('/assets', express.static('assets'));