定义路由时的可选参数
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
尚不支持可选块。
我正在研究 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
尚不支持可选块。