Nestjs 路由排除文件扩展名

发布于 2025-01-10 03:33:48 字数 489 浏览 0 评论 0原文

大家好,这几天我遇到了一个

用 NestJS 构建的挑战 (https://nestjs.com/

我想要一条仅在没有文件扩展名时侦听的路由。

例如

localhost:3000 -> good
localhost:3000/ -> good
localhost:3000/test -> good
localhost:3000/test.txt -> ignore
localhost:3000/css/mycss.css -> ignore

,另外,当路线有效时,我想知道参数中的 slug

例如

localhost:3000/test
Get('/:slug')
params.slug = test

有人可以帮助我吗?

Hi for a couple of days I have this challenge

I'm building with NestJS (https://nestjs.com/)

I want to have a route that only listens when it doesn't have a file extension.

So for example

localhost:3000 -> good
localhost:3000/ -> good
localhost:3000/test -> good
localhost:3000/test.txt -> ignore
localhost:3000/css/mycss.css -> ignore

Also, when the route is valid, I want to know the slug in the params

for example

localhost:3000/test
Get('/:slug')
params.slug = test

Can somebody help me?

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

那请放手 2025-01-17 03:33:48

NestJs 不支持控制器路由中的 RegExp。它只接受字符串或字符串数​​组。因此,您无法在那里设置复杂的模式。

字符 ?、+、* 和 () 可以在路由路径中使用,并且是其正则表达式对应项的子集。连字符 (-) 和点 (.) 按字面解释基于字符串的路径。

来源

但是,您可以获取请求值并手动检查。如果这种方式适合您,请尝试类似的操作

import {Controller, Get, Req} from '@nestjs/common';
import {Request} from 'express';

@Controller()
export class AppController {
  @Get(':slug')
  test(@Req() request: Request) {
    const pattern = /[\w]+[.]+[\w]+/;
    if (pattern.test(request.url)) return 'bad';

    return 'good';
  }
}

根据您的需要修改模式。
当前示例认为 something.txt 是不好的(任何包括点的东西都是不好的),但 something 是一个好的模式。

NestJs doesn't support RegExp in the controller routes. It only accepts strings or an array of strings. Thus, you cannot set sophisticated patterns there.

The characters ?, +, *, and () may be used in a route path, and are subsets of their regular expression counterparts. The hyphen ( -) and the dot (.) are interpreted literally by string-based paths.

Source

However, you can get the request value and check it manually. If this way is okay for you then try something like this

import {Controller, Get, Req} from '@nestjs/common';
import {Request} from 'express';

@Controller()
export class AppController {
  @Get(':slug')
  test(@Req() request: Request) {
    const pattern = /[\w]+[.]+[\w]+/;
    if (pattern.test(request.url)) return 'bad';

    return 'good';
  }
}

Modify the pattern as you need.
The current example considers something.txt as bad (Anything including dot is bad) but something as a good pattern.

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