【问题标题】:Deno: Access query params in controllerDeno:访问控制器中的查询参数
【发布时间】:2020-05-27 03:25:55
【问题描述】:

我为 Deno POC 编写了几个 api。

这是路线代码:

const router = new Router()
router.get('/posts', getPosts)
      .get('/posts/:id', getPostsById)

对于第二条路线,我可以在控制器中获取路径参数:getPostsById,使用关键字:params。这是控制器代码:

export const getPostsById = (
  { params, response }: { params:any, response: any }) => {
    console.log(params, '||| params')}

如何以类似方式获取查询参数(例如:/posts/2222?userId=3)

我正在使用橡木进行路由。我尝试了来自 Oak 代码库的各种关键字:查询、搜索等,但没有成功。

我也尝试了 Oak 文档中的 getQuery,但我完全无法导入它。

【问题讨论】:

    标签: typescript deno


    【解决方案1】:

    在 Oak 中你可以使用.searchParams

    ctx.request.url.searchParams
    

    要获得userId,您可以使用:

    const userId = ctx.request.url.searchParams.get('userId')
    

    getQuery from helpers.ts 目前仅在 master 上,因为它是在 12 小时前推出的。

    您可以导入https://deno.land/x/oak/helpers.ts,而不是使用https://deno.land/x/oak@v4.0.0/mod.ts,这将从master 中提取。虽然不建议这样做,但会在新版本发布并且您可以使用标记导入之前这样做。

    import { getQuery } from 'https://deno.land/x/oak/helpers.ts'
    
    router.get("/book/:id/page/:page", (ctx) => {
      getQuery(ctx, { mergeParams: true });
    });
    

    【讨论】:

    • 谢谢! @marcos:这行得通。这是我现在的控制器代码: export const getPosts = ( { request, response }: { request: any, response: any }) => { const userId = request.url.searchParams.get('userId'); console.log(userId, '||| userId'); }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多