NodeJS 路径解析处理

发布于 2022-09-17 20:20:43 字数 1323 浏览 142 评论 0

let routes = [];
let use = function (path, action) {
  routes.push([path, action])
}

use('/user', () => {
  console.log('获取用户信息')
})

http.createServer((req, res) => {
  let { pathname } = url.parse(req.url, true)
  routes.forEach(item => {
    let [path, handler] = item
    if (pathname === path) {
      handler(req, res)
    }
  })
})

手工映射十分方便,由于它对URL十分灵活,所以我们可以将两个路径都映射到相同的业务逻辑。对于简单的路径,采用上述的方式即可,但是如下的路径请求就完全无法满足需求了

/profile/jacksontian
/profile/hoover

这些请求需要根据不同的用户显示不同的内容,这里只有两个用户,假如系统中存在成千上万个用户,我们就不太可能去手工维护所有用户的路由请求,因此正则匹配应运而生,我们期望通过以下的方式就可以匹配到任意用户:

use('/profile/:username', function (req, res) {
// TODO
});

于是我们改进我们的匹配方式,在通过 use 注册路由时需要将路径转换为一个正则表达式,然后通过它来进行匹配,如下所示:

https://www.wenjiangs.com/wp-content/uploads/2022/09/democode2.txt

我们将根据抽取的键值和实际的URL得到键值匹配到的实际值,并设置到 req.params 处

https://www.wenjiangs.com/wp-content/uploads/2022/09/democode.txt

为了让Node能够支持RESTful需求,我们改进了我们的设计。如果 use 是对所有请求方法的处理,那么在 RESTful 的场景下,我们需要区分请求方法设计。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

雾里花

暂无简介

文章
评论
27 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文