Estoy tratando de implementar un filtro en la API antes de buscar.
Tengo una ruta API dinámica ([productType]), que funciona bien. Pero cuando trato de filtrar la API, no funciona. Entonces, la sintaxis para filtrar la API se ve así ?$filter=name eq 'Milk' y agregar esto a la url no funciona.
Como dice en los documentos, he intentado cambiar el nombre del archivo de esta manera [... productType] o [[... productType]] pero ninguno de ellos ayuda.
Devuelve los datos de la API sin filtrar. Aquí está mi código en la ruta dinámica API [tipo de producto]. páginas/api/[tipo de producto]
import axios, { AxiosRequestConfig, Method } from 'axios' import { pick } from 'lodash' import { NextApiRequest, NextApiResponse } from 'next' const baseUrl ='https://myUrl...' const getFromAPIServer = async ( req: NextApiRequest, res: NextApiResponse, ) => { const { productType } = req.query const param = req.query.params //here I tried to add the parameter for filter, which doesn't work const url = `${baseUrl}/${productType}?${param}?` const method = req.method as Method const { body } = req const allowedHeaders = ['If-Match'] const headers = pick(req.headers, allowedHeaders) as Record<string, string> try { const request: AxiosRequestConfig = { method, url, headers: { ...headers, Authorization: `Basic ${process.env.TOKEN}`, 'Content-Type': 'application/json', }, } if (method !== 'GET' && body) { request.data = body } const { data } = await axios.request(request) res.status(200).json(data) } catch (error) { if (!axios.isAxiosError(error)) { throw error } // Return AxiosError to the client res.status(error?.response?.status || 500).json(error?.response?.data) } } export default getFromAPIServerY en componentes tengo la función de obtención donde intento obtener la API con filtro
export const getApiRequest = (url: string) => { const { data } = useQuery(['key', url], async () => { const response = await fetch(url, { method: 'get', }) if (!response.ok) throw new Error(response.statusText) return await response.json() }) return { data } } const { data } = getApiRequest(`${productTypeUrl}?$filter=name eq 'Milk'`) Olvidé mencionar: en el filtrado de Postman, la API funciona bien. También funciona bien cuando trato de buscar con la URL del filtro en los componentes, sin importar desde la carpeta api .
Hacer el filtering en la carpeta api funciona de la siguiente manera
const url = `${baseUrl}/${productType}?$filter=name eq 'Milk'?` Sin embargo, esto no es lo que quiero. Quiero tener un filtro como parámetros en la carpeta API, como productType para poder usarlo en el lado del cliente.
Cualquier ayuda será apreciada