Express - 路由

发布时间 2023-08-20 13:05:00作者: OrzMiku

路由定义采用以下结构:

app.METHOD(PATH, HANDLER)

METHOD是请求方法,PATH是路径,HANDLER是处理路由的回调函数。

路由方法

Express 支持对应于 HTTP 方法的以下路由方法:get、post、put、head、delete、options、trace、copy、lock、mkcol、move、purge、propfind、proppatch、unlock、report、mkactivity、checkout、merge、m-search、notify、subscribe、unsubscribe、patch、search 和 connect。

特殊的,有一个路由方法“all”,用于在所有请求方法的路径中装入中间件函数。

在 Express.js 中,中间件是一个可以访问请求对象、响应对象和调用 next 方法的一个函数。在中间件函数中可以执行以下任何任务:执行任何代码、修改 request 或者 response 响应对象、结束请求响应周期、调用下一个中间件 。

在以下示例中,无论您使用 GET、POST、PUT、DELETE 还是在 http 模块中支持的其他任何 HTTP 请求方法,都将为针对“/secret”的请求执行处理程序。

app.all('/secret', function (req, res, next) {
  console.log('Accessing the secret section ...');
  next(); // pass control to the next handler
});

路由路径

路由路径支持两种匹配模式,字符串模式和正则模式。

字符串模式下可以使用字符 ?+*(),他们的含义与正则中的含义相同。
例如 '/ab(cd)?e' 将匹配 /abe/abcde 等路径。

app.get('/ab(cd)?e', function(req, res) {
 res.send('ab(cd)?e');
});

正则模式不需要引号包裹,直接使用正则表达式即可。
例如 /.*fly$/ 将匹配 butterflydragonfly,但是不匹配 butterflymandragonfly man 等。

app.get(/.*fly$/, function(req, res) {
  res.send('/.*fly$/');
});

路由处理函数

app.METHOD(PATH, HANDLER)

HANDLER是处理路由的回调函数。函数可以接受三个参数,req,res和next。
req 是 request 的缩写,表示 HTTP 请求。
res 是 response 的缩写,表示 HTTP 响应。
next 是一个函数,用于调用下一个中间件(下一个回调函数)。

你可以在HANDLER处传入多个回调函数,但是你要记得使用next函数调用下一个回调函数。

app.get('/example/b', function (req, res, next) {
  console.log('the response will be sent by the next function ...');
  next();
}, function (req, res) {
  res.send('Hello from B!');
});

res响应方法

方法 描述
res.download() 提示将要下载文件。
res.end() 结束响应进程。
res.json() 发送 JSON 响应。
res.jsonp() 在 JSONP 的支持下发送 JSON 响应。
res.redirect() 重定向请求。
res.render() 呈现视图模板。
res.send() 发送各种类型的响应。
res.sendFile() 以八位元流形式发送文件。
res.sendStatus() 设置响应状态码并以响应主体形式发送其字符串表示。

app.route()

可以使用 app.route() 为路由路径创建可链接的路由处理程序。 因为在单一位置指定路径,所以可以减少冗余和输入错误。

app.route('/book')
  .get(function(req, res) {
    res.send('Get a random book');
  })
  .post(function(req, res) {
    res.send('Add a book');
  })
  .put(function(req, res) {
    res.send('Update the book');
  });

express.Router

使用 express.Router 类来创建可安装的模块化路由处理程序。Router 实例是完整的中间件和路由系统;因此,常常将其称为“微型应用程序”。

以下示例将路由器创建为模块,在其中装入中间件,定义一些路由,然后安装在主应用程序的路径中。

在应用程序目录中创建名为 birds.js 的路由器文件,其中包含以下内容:

var express = require('express');
var router = express.Router();

// middleware that is specific to this router
router.use(function timeLog(req, res, next) {
  console.log('Time: ', Date.now());
  next();
});
// define the home page route
router.get('/', function(req, res) {
  res.send('Birds home page');
});
// define the about route
router.get('/about', function(req, res) {
  res.send('About birds');
});

module.exports = router;

接着,在应用程序中装入路由器模块:

var birds = require('./birds');
...
app.use('/birds', birds);

此应用程序现在可处理针对 /birds 和 /birds/about 的请求,调用特定于此路由的 timeLog 中间件函数。

基本都是从官网教程抄过来的,看完之后建议读一下express-generator生成出来的应用的源码是怎么写的。