基本路由的组成
-
请求方法
-
请求路径
-
请求处理函数
处理静态资源请求
-
app.use([path,] callback [, callback...])
为 path 注册中间函数。- path 默认值为 “/”; callback 一个中间件的功能、一系列中间件功能(由逗号分隔)、一组中间件函数、所有这些的结合。
- 当请求路径是 path 时,这些请求都会交给中间件函数处理。
-
express.static(root, [options])
处理静态资源请求的内置中间件功能。- root 静态资源的根路径
// 引入 express 模块 var express = require('express'); // 相当于创建了服务器对象 var app = express(); // 当请求的 url 以 path 开头时,使用 内置中间件 对请求进行处理,寻找对应的资源 app.use('/public/',express.static('./static/')); // 当 path参数 省略时,url 中的 path 也需省略
注意: 重点在于理解!!!
express 中的中间件
-
不关心请求路径和请求方法的中间件
var express = require('express') var app = express() // 也就是说任何请求都会进入这个中间件 // 中间件本身是一个方法,该方法接收三个参数: // Request 请求对象 // Response 响应对象 // next 下一个中间件 // 当一个请求进入一个中间件之后,如果不调用 next 则会停留在当前中间件,所以 next 是一个方法,用来调用下一个中间件的,调用 next 方法也是要匹配的(不一定是调用紧挨着的那个) app.use(function (req, res, next) { console.log('1') next() // 调用下一个中间件(不一定是紧挨着的那个),与请求路径相符的中间件 }) // 以 “/y” 开头的请求 app.use('/y', function (req, res, next) { console.log('y') console.log(req.url) }) // 以 “/x” 开头的请求 app.use('/x', function (req, res, next) { console.log('x') console.log(req.url) }) // 任何请求 app.use(function (req, res, next) { console.log('2') }) // 任何请求 app.use(function (req, res, next) { console.log('3') }) app.listen(3000, function () { console.log('服务器已创建,访问地址:127.0.0.1:3000') })
http://127.0.0.1:3000/x 执行结果
1 x /
-
同一个请求所经过的中间件都是同一个请求对象(req)和响应对象(res)
var express = require('express') var app = express() app.get('/x', function (req, res, next) { req.test = 'test' console.log('x') next() }) app.get('/x', function (req, res) { console.log(req.test) // test }) app.listen(3000, function () { console.log('服务器已创建,访问地址:127.0.0.1:3000') })
-
next() 参数的使用
- 当调用 next 的时候,如果传递了参数,则直接往后找到带有 四个参数的应用程序级别中间件
- 当发生错误的时候,我们可以调用 next 传递错误对象
- 然后就会被全局错误处理中间件匹配到并处理
var fs = rrequire('fs') var express = require('express') var app = express() app.get('/x', function (req, res, next) { fs.readFile('./public/hello.txt', function (err, data) { if (err) { next(err) } }) }) // nest() 传递了参数,该路由就不会执行,直接去寻找带有四个参数的中间件 app.get('/x', function (req, res, next) { console.log('test') }) // 处理错误 app.use(function (err, req, res, next) { console.log('Read failure') }) app.listen(3000, function () { console.log('服务器已创建,访问地址:127.0.0.1:3000') })