NodeJS 路径解析处理
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 技术交流群。

上一篇: nginx 配置详解
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论