首页 > 其他 > 详细

Express 实战(五):路由(未完成)

时间:2020-05-03 14:57:25      阅读:35      评论:0      收藏:0      [点我收藏+]

什么是路由?

假设,现在你尝试通过 example.com/someone 访问某人的推特或者微博主页,你会发现该请求的 HTTP 内容大致如下:

GET /someone http/1.1

其中包含了 HTTP 请求使用的方法(GET),URI 信息(/someone) 以及 HTTP 协议版本 (1.1)。

Express 中的路由就是负责将其中的 HTTP 方法和 URI 这对组合映射到对应的中间件。

简单说就是, /about_me 的GET 请求会执行某个中间件而对于 /new_user 的 POST 请求则执行另一个中间件。

下面我们通过一个简单示例来看看到底路由时如何工作的。

路由的一个简单示例

下面我们就对 example.com/someone 请求进行一个简单的实现,代码如下:

var express = require("express");
var app = express();

app.get(‘/someone‘, function(request, response) {
    response.send(" Welcome to someone‘s homepage! ");
});

app.use(function(request, response) {
    response.status(404).send("Page not found!");
});

app.listen(3000);

上面代码中有价值的是第三行:当你通过 HTTP 的 GET 方法对 /someone 发起请求时,程序会执行该中间件中的代码,其他请求则会被忽略并跳转到下一个中间件。

路由的特性

从工作原理来说:路由就是通过对 HTTP 方法和的 URI 的组合进行映射来实现对不同请求的分别处理。

当然,除了上面那种最简单的使用方式之外,Express 的路由还有更多实用的使用技巧和方法。

含参的通配路由

在上面的使用方式中使用的是全等判断来进行路由匹配的。虽然对于 /someone 这类非常管用。

但是对于形如 /users/1/users/2 这类 RESTful 路由就明显不那么友好了。

因为如果将后者路由一一列出的话,不管是从工作量还是后期维护来说都是非常差开发体验。针对这种情况,我们可以使用 Express 中含参的通配路由来解决。

该方法的工作原理就是,在路由中使用参数进行通配表示。而该参数所表示的具体数值会在变量 params 中获取到,下面是简单的代码示例:

app.get("/users/:userid", function(req, res) {
    // 将userId转换为整型
    var userId = parseInt(req.params.userid, 10);
    // ...
});
这样 RESTful 风格的动态路由就完全可以通过这种含参的通配路由进行处理。那么无论是 /users/123 还是 /users/8 都会被映射到同一中间件。
虽然 /users/ 或者 /users/123/posts 不会被匹配,但是 /users/cake/users/horse_ebooks 确会被匹配到。所以,如果实现更精准的路由匹配的话就需要使用其他方式了。

使用正则表达式匹配路由

针对上面的问题,我们可以使用正则来对路由进行更精准的匹配。

假设现在我们只需要匹配 /users/123/users/456 这种通配参数为数字的动态路由的同时忽略其他路由格式,那么可以将代码改为:

app.get(/^\/users\/(\d+)$/, function(req, res) {
    var userId = parseInt(req.params[0], 10);
    // ...
});

通过正则表达式代码对通配参数作为了严格限定:该参数必须是数字类型。

正则表达式可能阅读起来并不是很友好,但是它却可以实现对复杂路由匹配规则的准确定义。

例如,你想匹配路由 /users/100-500 这类表示某个用户范围的列表页面,那么该正则如下:

app.get(/^\/users\/(\d+)-(\d+)$/, function(req, res) {

    var startId = parseInt(req.params[0], 10);

    var endId = parseInt(req.params[1], 10);
    //
});

正则表达式可以让你的路由匹配定义更上一层楼。

Express 实战(五):路由(未完成)

原文:https://www.cnblogs.com/magicg/p/12821859.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!