Express框架——路由篇

俗话说——工欲善其事必先利其器,所以我们上一篇主要讲解了 Express框架 的安装。那么这一篇我们来了解一下 Express 中的路由

路由

路由用于确定应用程序如何响应对特定端点的客户机请求,包含一个 URI(或路径)和一个特定的 HTTP 请求方法(GET、POST 等)。

每个路由可以具有一个或多个处理程序函数,这些函数在路由匹配时执行。
在中,路由有两种使用方式,一种是直接通过 express 实例直接使用,一种是通过路由器。那么我们分别去了解

express 实例

我们可以通过app.METHOD(PATH,HANDLER)语法定义路由,

  • app 是express的实例
  • METHOD是HTTP请求方法(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
  • PATH是服务器上的路径
  • HANDLER是在路由匹配时执行的函数
一个基本实例
var express = require('express')
var app = express()

app.get('/', function (req, res) {
  res.send('hello world')
})
路由路径

路由路径与请求方法相结合,用于定义可以在其中提出请求的端点。

路由路径可以是字符串,字符串模式或正则表达式。查询字符串不是路由路径的一部分。

路由方法

路由方法是从HTTP方法之一派生的,并附加到express该类的实例。Express支持与所有HTTP请求方法相对应的方法:get,post等。

除了 get,post等可以方法,有一种特殊的路由方法,app.all()用于为所有 HTTP 请求方法的路径加载中间件功能

路由参数

路由参数被命名为URL段,用于捕获URL中在其位置处指定的值。捕获的值将填充到req.params对象中,并将路径中指定的route参数的名称作为其各自的键。

Route path: /users/:userId/books/:bookId
Request URL: http://localhost:3000/users/34/books/8989
req.params: { "userId": "34", "bookId": "8989" }

要使用路由参数定义路由,只需在路由路径中指定路由参数,如下所示。

app.get('/users/:userId/books/:bookId', function (req, res) {
  res.send(req.params)
})

从上述可以看出,使用:可以动态匹配路由参数,除了正常的使用:,还可以使用正则表达式

Route path: /user/:userId(\d+)
Request URL: http://localhost:3000/user/42
req.params: {"userId": "42"}
路由处理程序

路由处理程序的形式可以是一个函数、一组函数或者二者的结合。

  • 单个回调函数可以处理一个路由
app.get('/', function(req, res) {
    res.send('hello world');
});
`	``

- 多个回调函数可以处理一个路由
```js
多个回调函数可以处理一个路由
app.get('/', function(req, res, next) {
    console.log('the response will be sent by the next function ...');
    next();
}, function(req, res) {
    res.send('Hello from B!');
});
  • 一组回调函数可以处理一个路由
var cb0 = function (req, res, next) {
  console.log('CB0');
  next();
}

var cb1 = function (req, res, next) {
  console.log('CB1');
  next();
}

var cb2 = function (req, res) {
  res.send('Hello from C!');
}

app.get('/', [cb0, cb1, cb2]);
  • 独立函数与一组函数的组合可以处理一个路由
var cb0 = function (req, res, next) {
  console.log('CB0');
  next();
}

var cb1 = function (req, res, next) {
  console.log('CB1');
  next();
}

app.get('/', [cb0, cb1], function (req, res, next) {
  console.log('the response will be sent by the next function ...');
  next();
}, function (req, res) {
  res.send('Hello from D!');
});

从上述实例中可以看出,在路由处理程序中可以接收三个参数,分别表示请求、响应、和一个next 对象(用于进入下一个处理程序)。其中 req 为请求对象,用于获取客户端发送的请求,而 res 为响应对象,用于响应请求的,当在路由处理程序中没有调用以下方法,则客户端请求将挂起

方法说明
res.download()提示要下载的文件。
res.end()结束响应过程。
res.json()发送JSON响应。.
res.jsonp()发送具有JSONP支持的JSON响应。
res.redirect()重定向请求。
res.render()渲染视图样板。
res.send()发送各种类型的响应。
res.sendFile()以八位字节流的形式发送文件。
res.sendStatus()设置响应状态代码并将其字符串表示形式作为响应主体发送。
app.route()

在上述的方法中,我们必须通过get、post等路由方法来处理请求。我们还有一种可以同时处理多种请求方式,通过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')
    });

当我们匹配到 路径/book时,我们在进行判断,判断当前的请求方式,然后找到对应的请求方式的路由处理程序。

路由器

上面内容我们讲解的是通过 express 实例来使用路由,当然除了上述那种方式,我们还可以使用路由器。

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

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

在通过 创建路由时,应该将 存放在单独的文件中,然后在应用程序中加载路由器模块,首先创建一个 admin.js 文件,然后写入以下内容:

var express = require('express')
var router = express.Router()
// 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 admin')
})

module.exports = router

然后,在应用程序中加载路由器模块之后才能使用:

var admin= require('./admin')

// ...
app.use('/admin', admin)

该应用程序现在将能够处理对 /admin 和的请求 /admin/about 中间件功能。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值