Node.JS/Express - 使用 URL 参数获取公司产品
Node.JS/Express - Get company products using URL params
我正在尝试使用 RESTful API 在我的应用程序中检索特定公司的产品。
我尝试使用的 GET 方法是这样的:
http://localhost:3333/company/:company_id/products
所以我尝试了这个方法:
const routes = Router();
const company = `/company/:company_id`;
routes.use(`${company}/products`, productsRouter);
export default routes;
然后,在产品路由器中,我添加了这个:
const productsRouter = Router();
const productsController = new ProductsController();
productsRouter.get('/', productsController.index);
export default productsRouter;
如果我尝试通过浏览器或 Insomnia 访问路由,它会正确找到路由,但我无法从第一条路由获取 :company_id
参数。
当我尝试获取它时,request.params
和 request.query
return 都没有:
public async index(request: Request, response: Response): Promise<Response> {
const { company_id } = request.params;
const listProducts = container.resolve(ListProductsService);
const products = await listProducts.execute(company_id);
return response.json(products);
}
对如何处理这种情况有什么想法吗?
使用路由器的 mergeParams
选项。
mergeParams
Preserve the req.params
values from the parent router. If the parent
and the child have conflicting param names, the child’s value take
precedence.
default value: false
const productsRouter = Router({mergeParams: true});
我正在尝试使用 RESTful API 在我的应用程序中检索特定公司的产品。
我尝试使用的 GET 方法是这样的:
http://localhost:3333/company/:company_id/products
所以我尝试了这个方法:
const routes = Router();
const company = `/company/:company_id`;
routes.use(`${company}/products`, productsRouter);
export default routes;
然后,在产品路由器中,我添加了这个:
const productsRouter = Router();
const productsController = new ProductsController();
productsRouter.get('/', productsController.index);
export default productsRouter;
如果我尝试通过浏览器或 Insomnia 访问路由,它会正确找到路由,但我无法从第一条路由获取 :company_id
参数。
当我尝试获取它时,request.params
和 request.query
return 都没有:
public async index(request: Request, response: Response): Promise<Response> {
const { company_id } = request.params;
const listProducts = container.resolve(ListProductsService);
const products = await listProducts.execute(company_id);
return response.json(products);
}
对如何处理这种情况有什么想法吗?
使用路由器的 mergeParams
选项。
mergeParams
Preserve the
req.params
values from the parent router. If the parent and the child have conflicting param names, the child’s value take precedence.default value: false
const productsRouter = Router({mergeParams: true});