fix: route syntax for hono (#14638)

* fix: use :param{.+} instead of :param+ for hono

* fix: use two separate routes to simulate :param* in hono

It seems that hono does not support this route syntax. We can simulate
it via two separate routes.

See https://github.com/orgs/honojs/discussions/1536

* fix: use {} instead of () for regex in hono

* fix: revert changes to lib/router.js as it's still using koa router

* Revert "fix: use two separate routes to simulate :param* in hono"

This reverts commit b00a0a74a0.

* fix: use :param{.+}? to simulate :param*

* feat: add hint about trailing slash in error message
This commit is contained in:
Yufan You
2024-03-05 21:02:41 +08:00
committed by GitHub
parent a429472311
commit c039164007
40 changed files with 62 additions and 59 deletions
+3
View File
@@ -68,6 +68,9 @@ export const errorHandler: ErrorHandler = (error, ctx) => {
} else if (error instanceof NotFoundError) {
ctx.status(404);
message = 'wrong path';
if (ctx.req.path.endsWith('/')) {
message += ', you can try removing the trailing slash in the path';
}
} else {
ctx.status(404);
}
+1 -1
View File
@@ -1,5 +1,5 @@
export default (router) => {
router.get('/', './latest');
router.get('/cat/:cat*', './cat');
router.get('/cat/:cat{.+}?', './cat');
router.get('/tag/:tag', './tag');
};
+1 -1
View File
@@ -1,3 +1,3 @@
export default (router) => {
router.get('/:category*', './');
router.get('/:category{.+}?', './');
};
+1 -1
View File
@@ -1,3 +1,3 @@
export default (router) => {
router.get('/:category*', './');
router.get('/:category{.+}?', './');
};
+1 -1
View File
@@ -1,6 +1,6 @@
export default (router) => {
router.get('/bs/:category?', './bs');
router.get('/dwxgb/:category/:type', './dwxgb');
router.get('/fdy/:path*', './fdy');
router.get('/fdy/:path{.+}?', './fdy');
router.get('/lib/:category?', './lib');
};
+1 -1
View File
@@ -1,4 +1,4 @@
export default (router) => {
router.get('/news/:type', './news/index');
router.get('/sme/:path*', './sme');
router.get('/sme/:path{.+}?', './sme');
};
+2 -2
View File
@@ -1,9 +1,9 @@
export default (router) => {
router.get('/cg/:caty?', './cg/index');
router.get('/genetics/:path+', './genetics/index');
router.get('/genetics/:path{.+}', './genetics/index');
router.get('/ia/yjs', './ia/yjs');
router.get('/iee/kydt', './iee/kydt');
router.get('/is/:path+', './is/index');
router.get('/is/:path{.+}', './is/index');
router.get('/mesalab/kb', './mesalab/kb');
router.get('/sim/kyjz', './sim/kyjz');
};
+1 -1
View File
@@ -1,3 +1,3 @@
export default (router) => {
router.get('/:id*', './');
router.get('/:id{.+}?', './');
};
+1 -1
View File
@@ -1,3 +1,3 @@
export default (router) => {
router.get('/:id*', './');
router.get('/:id{.+}?', './');
};
+1 -1
View File
@@ -1,3 +1,3 @@
export default (router) => {
router.get('/:cate*', './index');
router.get('/:cate{.+}?', './index');
};
+1 -1
View File
@@ -9,5 +9,5 @@ export default (router) => {
router.get('/news/zzkx', toZzkx);
router.get('/zzkx', toZzkx);
router.get('/video/:category?', './video');
router.get('/:category*', './');
router.get('/:category{.+}?', './');
};
+3 -3
View File
@@ -1,5 +1,5 @@
export default (router) => {
router.get('/:ver([7|x])/:cid([0-9]{2})/:link(.*)', './discuz');
router.get('/:ver([7|x])/:link(.*)', './discuz');
router.get('/:link(.*)', './discuz');
router.get('/:ver{[7x]}/:cid{[0-9]{2}}/:link{.+}', './discuz');
router.get('/:ver{[7x]}/:link{.+}', './discuz');
router.get('/:link{.+}', './discuz');
};
+1 -1
View File
@@ -1,3 +1,3 @@
export default (router) => {
router.get('/:filter*', './index');
router.get('/:filter{.+}?', './index');
};
+1 -1
View File
@@ -3,7 +3,7 @@ export default (router) => {
router.get('/comments/:user/:repo/:type/:number', './comments'); // deprecated
router.get('/comments/:user/:repo/:number?', './comments');
router.get('/contributors/:user/:repo/:order?/:anon?', './contributors');
router.get('/file/:user/:repo/:branch/:filepath+', './file');
router.get('/file/:user/:repo/:branch/:filepath{.+}', './file');
router.get('/gist/:gistId', './gist');
router.get('/issue/:user/:repo/:state?/:labels?', './issue');
router.get('/notifications', './notifications');
+15 -15
View File
@@ -3,14 +3,14 @@ export default (router) => {
router.get('/cac/*', './cac/index');
router.get('/caac/cjwt/:category?', './caac/cjwt');
router.get('/ccdi/*', './ccdi');
router.get('/chinamine-safety/zfxxgk/:category*', './chinamine-safety/zfxxgk');
router.get('/chinamine-safety/xw/:category*', './chinamine-safety/xw');
router.get('/chinamine-safety/zfxxgk/:category{.+}?', './chinamine-safety/zfxxgk');
router.get('/chinamine-safety/xw/:category{.+}?', './chinamine-safety/xw');
router.get('/chinatax/latest', './chinatax/latest');
router.get('/cmse/fxrw', './cmse/fxrw');
router.get('/cmse/*', './cmse');
router.get('/cnnic/*', './cnnic');
router.get('/csrc/auditstatus/:apply_id', './csrc/auditstatus');
router.get('/csrc/news/:suffix*', './csrc/news');
router.get('/csrc/news/:suffix{.+}?', './csrc/news');
router.get('/customs/list/:gchannel?', './customs/list');
router.get('/fmprc/:category?', './mfa/wjdt');
router.get('/forestry/gjlckjdjt/:category?', './forestry/gjlckjdjt');
@@ -20,26 +20,26 @@ export default (router) => {
router.get('/mee/ywdt/:category?', './mee/ywdt');
router.get('/mem/gk/sgcc/:category?', './mem/sgcc');
router.get('/mfa/wjdt/:category?', './mfa/wjdt');
router.get('/mot/:category*', './mot');
router.get('/mot/:category{.+}?', './mot');
router.get('/miit/wjfb/:ministry', './miit/wjfb');
router.get('/miit/yjzj', './miit/yjzj');
router.get('/miit/zcwj', './miit/zcwj');
router.get('/miit/wjgs', './miit/wjgs');
router.get('/miit/zcjd', './miit/zcjd');
router.get('/moa/sjzxfb/:category*', './moa/zdscxx');
router.get('/moa/zdscxx/:category*', './moa/zdscxx');
router.get('/moa/:suburl(.*)', './moa/moa');
router.get('/moa/sjzxfb/:category{.+}?', './moa/zdscxx');
router.get('/moa/zdscxx/:category{.+}?', './moa/zdscxx');
router.get('/moa/:suburl{.+}', './moa/moa');
router.get('/moe/:type', './moe/moe');
router.get('/moe/s78/:column', './moe/s78');
router.get('/mof/bond/:category?', './mof/bond');
router.get('/mofcom/article/:suffix+', './mofcom/article');
router.get('/mofcom/article/:suffix{.+}', './mofcom/article');
router.get('/moj/aac/news/:type?', './moj/aac/news');
router.get('/moj/lfyjzj', './moj/lfyjzj');
router.get('/ndrc/fggz/:category*', './ndrc/fggz');
router.get('/ndrc/xwdt/:category*', './ndrc/xwdt');
router.get('/ndrc/fggz/:category{.+}?', './ndrc/fggz');
router.get('/ndrc/xwdt/:category{.+}?', './ndrc/xwdt');
router.get('/nea/sjzz/ghs', './nea/ghs');
router.get('/news/:uid', './news');
router.get('/nifdc/:path*', './nifdc');
router.get('/nifdc/:path{.+}?', './nifdc');
router.get('/nmpa/*', './nmpa/generic');
router.get('/nopss/*', './nopss');
router.get('/npc/:caty', './npc/index');
@@ -53,20 +53,20 @@ export default (router) => {
router.get('/safe/business/:site?', './safe/business');
router.get('/safe/complaint/:site?', './safe/complaint');
router.get('/samr/xgzlyhd/:category?/:department?', './samr/xgzlyhd');
router.get('/sasac/:path+', './sasac/generic');
router.get('/sasac/:path{.+}', './sasac/generic');
router.get('/stats/*', './stats');
router.get('/zhengce/govall/:advance?', './zhengce/govall');
router.get('/zhengce/wenjian/:pcodeJiguan?', './zhengce/wenjian');
router.get('/zhengce/zhengceku/:department', './zhengce/zhengceku');
router.get('/zhengce/zuixin', './zhengce');
router.get('/zhengce/:category*', './zhengce');
router.get('/zhengce/:category{.+}?', './zhengce');
// province
router.get('/anhui/kjt/*', './anhui/kjt');
router.get('/beijing/bjedu/gh/:urlPath?', './beijing/bjedu/gh');
router.get('/beijing/bphc/*', './beijing/bphc');
router.get('/beijing/jw/tzgg', './beijing/jw/tzgg');
router.get('/beijing/kw/:channel', './beijing/kw/index');
router.get('/chongqing/gzw/:category*', './chongqing/gzw');
router.get('/chongqing/gzw/:category{.+}?', './chongqing/gzw');
router.get('/chongqing/rsks', './chongqing/rsks');
router.get('/chongqing/sydwgkzp', './chongqing/sydwgkzp');
router.get('/dianbai/*', './dianbai/dianbai');
@@ -95,7 +95,7 @@ export default (router) => {
router.get('/sichuan/deyang/govpublicinfo/:countyName/:infoType?', './sichuan/deyang/govpublicinfo');
router.get('/sichuan/deyang/mztoday/:infoType?', './sichuan/deyang/mztoday');
router.get('/suzhou/doc', './suzhou/doc');
router.get('/suzhou/fg/:category*', './suzhou/fg');
router.get('/suzhou/fg/:category{.+}?', './suzhou/fg');
router.get('/suzhou/news/:uid', './suzhou/news');
router.get('/taiyuan/rsj/:caty/:page?', './taiyuan/rsj');
router.get('/wuhan/sy/whyw', './wuhan/whyw');
+1 -1
View File
@@ -1,3 +1,3 @@
export default (router) => {
router.get('/v/:category*', './program');
router.get('/v/:category{.+}?', './program');
};
+1 -1
View File
@@ -1,4 +1,4 @@
export default (router) => {
router.get('/list/:id', './list');
router.get('/:category*', './lists');
router.get('/:category{.+}?', './lists');
};
+1 -1
View File
@@ -1,3 +1,3 @@
export default (router) => {
router.get('/:region?/:category*', './');
router.get('/:region?/:category{.+}?', './');
};
+1 -1
View File
@@ -1,4 +1,4 @@
export default (router) => {
router.get('/itnews/:channel', './itnews');
router.get('/:params*', './');
router.get('/:params{.+}?', './');
};
+1 -1
View File
@@ -1,5 +1,5 @@
export default (router) => {
router.get('/lc_report/:id?', './report');
router.get('/report/:id?', './report');
router.get('/:category*', './');
router.get('/:category{.+}?', './');
};
+1 -1
View File
@@ -1,3 +1,3 @@
export default (router) => {
router.get('/:id?/:category*', './');
router.get('/:id?/:category{.+}?', './');
};
+1 -1
View File
@@ -1,3 +1,3 @@
export default (router) => {
router.get('/imap/:email/:folder*', './imap');
router.get('/imap/:email/:folder{.+}?', './imap');
};
+1 -1
View File
@@ -2,5 +2,5 @@ export default (router) => {
router.get('/cid/:id?', './cid');
router.get('/rank/:range?', './rank');
router.get('/zhibo', './cid');
router.get('/:category*', './');
router.get('/:category{.+}?', './');
};
+1 -1
View File
@@ -1,3 +1,3 @@
export default (router) => {
router.get('/cmdp/image/:id*', './cmdp');
router.get('/cmdp/image/:id{.+}?', './cmdp');
};
+1 -1
View File
@@ -1,3 +1,3 @@
export default (router) => {
router.get('/:category*', './');
router.get('/:category{.+}?', './');
};
+1 -1
View File
@@ -1,5 +1,5 @@
export default (router) => {
router.get('/liuyan/:id/:state?', './liuyan');
router.get('/xjpjh/:keyword?/:year?', './xjpjh');
router.get('/:site?/:category*', './');
router.get('/:site?/:category{.+}?', './');
};
+1 -1
View File
@@ -1,3 +1,3 @@
export default (router) => {
router.get('/:topicPath*', './index');
router.get('/:topicPath{.+}?', './index');
};
+1 -1
View File
@@ -1,3 +1,3 @@
export default (router) => {
router.get('/news/:path*', './news');
router.get('/news/:path{.+}?', './news');
};
+1 -1
View File
@@ -1,3 +1,3 @@
export default (router) => {
router.get('/:path+', './price');
router.get('/:path{.+}', './price');
};
+1 -1
View File
@@ -1,3 +1,3 @@
export default (router) => {
router.get('/:path*', './news');
router.get('/:path{.+}?', './news');
};
+1 -1
View File
@@ -1,3 +1,3 @@
export default (router) => {
router.get('/std/realtime/:category*', './std/realtime');
router.get('/std/realtime/:category{.+}?', './std/realtime');
};
+1 -1
View File
@@ -1,3 +1,3 @@
export default (router) => {
router.get('/blog/:category*', './blog');
router.get('/blog/:category{.+}?', './blog');
};
+1 -1
View File
@@ -1,6 +1,6 @@
export default (router) => {
router.get('/', './index');
router.get('/category/:id+', './index');
router.get('/category/:id{.+}', './index');
router.get('/info', './index');
router.get('/report', './index');
router.get('/topic/:id', './index');
+1 -1
View File
@@ -1,3 +1,3 @@
export default (router) => {
router.get('/:params*', './');
router.get('/:params{.+}?', './');
};
+1 -1
View File
@@ -1,5 +1,5 @@
export default (router) => {
router.get('/blog/:category*', './blog');
router.get('/blog/:category{.+}?', './blog');
router.get('/desktop', './desktop');
router.get('/pine/:version?', './pine');
};
+2 -2
View File
@@ -1,6 +1,6 @@
export default (router) => {
router.get('/cs/:type', './cs');
router.get('/gs/:type?', './gs/index.js');
router.get('/hyxt/:category*', './hyxt');
router.get('/news/:category*', './news');
router.get('/hyxt/:category{.+}?', './hyxt');
router.get('/news/:category{.+}?', './news');
};
+1 -1
View File
@@ -1,3 +1,3 @@
export default (router) => {
router.get('/publish/:category*', './publish');
router.get('/publish/:category{.+}?', './publish');
};
+1 -1
View File
@@ -1,3 +1,3 @@
export default (router) => {
router.get('/:path*', './index');
router.get('/:path{.+}?', './index');
};
+3 -3
View File
@@ -1,10 +1,10 @@
export default (router) => {
router.get('/2yuan/news/:id?', './2yuan/news');
router.get('/dean/:subpath+', './dean');
router.get('/dyyy/:path+', './dyyy/index');
router.get('/dean/:subpath{.+}', './dean');
router.get('/dyyy/:path{.+}', './dyyy/index');
router.get('/ee/:id?', './ee');
router.get('/gs/tzgg', './gs/tzgg');
router.get('/international/:subpath+', './international');
router.get('/international/:subpath{.+}', './international');
router.get('/job/:subpath?', './job');
router.get('/std/:category?', './std');
};
+1 -1
View File
@@ -1,4 +1,4 @@
export default (router) => {
router.get('/epaper/:id?', './epaper');
router.get('/news/:category*', './news');
router.get('/news/:category{.+}?', './news');
};