快速应用程序获取模式抛出“无法获取”

时间:2019-06-05 06:05:07

标签: node.js regex typescript express

我有以下类型的页面:

  1. 根(/
  2. 今天的章节(/929/929/)最终会重定向到/929/<CHAPTER>,其中<CHAPTER>是1到929之间的自然数
  3. 第(/929/<CHAPTER>/929/<CHAPTER>/章,其中<CHAPTER>是1到929之间的自然数
  4. 有关各章(/929/<CHAPTER>/<ARTICLE_ID>/929/<CHAPTER>/<ARTICLE_ID>/的文章,其中<CHAPTER>是1到929之间的自然数,并且是1,2 ... 99999999之类的自然数

1至3个页面类型可以正常工作。第四是抛出:

  

无法获取/ 929/233/3027

这里的代码:

app.get("/", rootMiddleware);
app.get("/929[/]{0,1}", todaysChapterMiddleware);
app.get("/929/:chapter(([1-9]|[1-9][0-9]|[1-8][0-9]{2}|9[01][0-9]|92[0-9]))[/]{0,1}", chapterMiddleware);
app.get("/929/:chapter(([1-9]|[1-9][0-9]|[1-8][0-9]{2}|9[01][0-9]|92[0-9]))/:articleId((\d+))[/]{0,1}", articleMiddleware);

3 个答案:

答案 0 :(得分:1)

由于正则表达式通常是文字字符串的一部分,因此请务必对所有\字符加上反斜杠进行转义,例如\\ d +。

所以正确的第四条路线应该是:

app.get("/929/:chapter(([1-9]|[1-9][0-9]|[1-8][0-9]{2}|9[01][0-9]|92[0-9]))/:articleId((\\d+))[/]{0,1}", articleMiddleware);

答案 1 :(得分:1)

添加\以转义\

如此

来自

app.get("/929/:chapter(([1-9]|[1-9][0-9]|[1-8][0-9]{2}|9[01][0-9]|92[0-9]))/:articleId((\d+))[/]{0,1}", articleMiddleware);

app.get("/929/:chapter(([1-9]|[1-9][0-9]|[1-8][0-9]{2}|9[01][0-9]|92[0-9]))/:articleId((\\d+))[/]{0,1}", articleMiddleware);

答案 2 :(得分:-1)

在app.js主文件中:

app.use("/",routesfile);

在路线文件中:

router.get('/929/<CHAPTER>',controller file)