路由匹配简写
来源:5-6 初始化路由
Just90
2020-08-12
在 app.js 中不需要去获取 url 和 path,获取 path 的目的是全局匹配路径。但是有些请求是不携带参数的,比如 /api/blog/list
表示获取全部博客。这时通过 res.url.split('?')[0]
虽然能返回/api/blog/list
,但是讲不通,他没有 ‘?’, 所以不存在通过 ‘split’ 切割,然后获取数组第一个元素。
我们可以在直接 blog.js 中,通过 req.url.includes('/api/blog/list')
来判断是否匹配上了路由。如下:blog.js:
const handleBlogRouter = (req, res) => {
const method = req.method;
// 博客列表
if (method === 'GET' && req.url.includes('/api/blog/list')) {
return {
msg: '博客列表接口',
};
}
// 博客详情
if (method === 'GET' && req.url.includes('/api/blog/detail')) {
return {
msg: '博客详情接口',
};
}
// 新建一条博客
if (method === 'POST' && req.url.includes('/api/blog/new')) {
return {
msg: '新建博客接口',
};
}
// 更新博客
if (method === 'POST' && req.url.includes('/api/blog/update')) {
return {
msg: '更新博客接口',
};
}
// 删除一条博客
if (method === 'POST' && req.url.includes('/api/blog/delete')) {
return {
msg: '删除博客接口',
};
}
};
module.exports = handleBlogRouter;
app.js
const handleBlogRouter = require('./src/router/blog');
const handleUserRouter = require('./src/router/user');
const serverHandle = (req, res) => {
res.setHeader('Content-type', 'application/json');
const blogData = handleBlogRouter(req, res);
if (blogData) {
res.end(JSON.stringify(blogData));
return;
}
const userData = handleUserRouter(req, res);
if (userData) {
res.end(JSON.stringify(userData));
return;
}
res.writeHead(404, { 'Content-type': 'text/plain' });
res.write('404 not found');
res.end();
};
module.exports = serverHandle;
// env: process.env.NODE_ENV,
写回答
2回答
-
Narmo
2021-06-16
这种写法有问题,比如api/blog/list/xxx你就会匹配到api/blog/list的路由里去。虽然这个简单的项目是没问题,一旦复杂起来就会容易出现bug
00 -
双越
2020-08-12
嗯嗯,这样也可以。
00
相似问题