定义路由时的可选参数

optional parameters when defining routes

我正在研究 deno 相当于我的 node (express) 服务器应用程序用于研究目的,但我找不到在定义 routes 时应用 optional 块的方法.

例如在express应用程序中我有路线:/search/:start/:records?

import { Application } from "https://deno.land/x/abc@v1.3.3/mod.ts";
import { search } from "./controllers/data.ts";

const app = new Application();

const PORT = 80;

app.get("/search/:start/:records?", search);

app.start({ port: PORT });

对于 deno 的实验,我选择了 lib abc,它看起来类似于 express

启动运行时时,我的旧路由正在运行,除了可选块,它们不再是可选的,而是需要提供它们,否则将返回错误 404

有人有处理可选参数和 deno 的经验吗?

我对 abc 了解不多,但 oak 目前是 Deno 最 commonly-used 的 http 服务器框架(我认为它类似于根据流行度指标表达)。

它使用 path-to-regexp 来解析路径字符串(这也是 Express 使用的),因此它允许使用您已经熟悉的相同语法的可选参数。

下面是一个使用 Oak 创建与您问题中的路线类似的路线,并在 JSON 响应中将路径参数值作为属性发送的示例:

import { Application, Router } from "https://deno.land/x/oak@v10.5.1/mod.ts";

const router = new Router();
router.get("/search/:start/:records?", async (ctx, next) => {
  const { start, records = null } = ctx.params;
  const json = JSON.stringify({ start, records }, null, 2);
  ctx.response.body = json;
  ctx.response.type = "application/json";
  await next();
});

const app = new Application();
app
  .use(router.routes())
  .use(router.allowedMethods());

await app.listen({ port: 8000 });

abc 尚不支持可选块。