Adonisjs 中的路由可选参数

Routing optional parameters in Adonisjs

尝试在 adonisjs 中使用可选参数进行路由时遇到问题。当我写不同的端点时,参数的结果也不同

这是我的路由器代码:

Route.post('product/:id_product?', 'ProductController.addProduct')

如果我在邮递员中向此端点发送参数

http://localhost:3333/shoping/product   //the result of parameter is null
or
http://localhost:3333/shoping/product/1    //the result of parameter is 1

可以在 console.log 中读取该参数,但如果我尝试 运行 这个端点:

http://localhost:3333/shoping/product    //the result of parameter is null
or
http://localhost:3333/shoping/product?id_product=1    //the result of parameter also null

console.log 的结果只是 null。那么我的路线有什么问题?

当你创建一条路线时,这条路线路径是这样的

http://localhost:3333/shoping/product/1

当你像这样在控制器中得到这个id_product时

console.log(params.id_product) 所以可以获得 1 或者当你使用这个

传入路径时
http://localhost:3333/shoping/product?id_product=1 

这不会给你任何参数,因为在这种情况下 id_product 是一个查询参数,如果你在这个路径中得到 id_product 那么你会得到这样的

      const queryData = request.get();
      console.log(queryData.id_product)

所以得到 1 或当你通过这个打印时

有两个不同点:

  1. Request body

url 示例:

http://localhost:3333/shoping/product?id_product=1
http://localhost:3333/shoping/product?id_product=1&name=test

路线示例:shoping/product

控制器集成:

test ({request}) {
 const product = request.only(['id_product', 'name'])

 console.info(product.id_product) //output 1
}
  1. Route parameters

url 示例:

http://localhost:3333/shoping/product/1

路线示例:shoping/product/:id_product?

控制器集成:

test ({params}) {
 const id_product = params.id_product

 console.info(id_product ) //output 1
}