Catálogo y búsqueda
Consulta productos, facetas, detalle, relacionados y autocomplete con serverApi.
serverApi ejecuta las consultas de Storefront API como funciones de servidor.
Úsalo en loaders para entregar HTML con datos desde la primera respuesta.
Página de resultados
import {
definePage,
serverApi,
z,
type ProductsResponse,
} from "@ecomiq/storefront";
const ProductSearchSchema = z.object({
q: z.string().optional(),
page: z.coerce.number().int().positive().catch(1),
});
type ProductSearch = z.infer<typeof ProductSearchSchema>;
export default definePage<
ProductsResponse,
Record<string, string>,
ProductSearch
>({
validateSearch: (raw) => ProductSearchSchema.parse(raw),
loader: ({ search }) =>
serverApi.getProducts({
search: search.q,
page: search.page,
pageSize: 24,
}),
meta: ({ search }) => ({
title: search.q ? `Resultados para ${search.q}` : "Productos",
}),
component: ({ data }) => (
<section>
<h1>{data.totalCount} productos</h1>
{data.products.map((product) => (
<article key={product.id}>
<h2>{product.name}</h2>
<p>{product.price}</p>
</article>
))}
</section>
),
});Métodos
| Método | Resultado |
|---|---|
serverApi.getProducts(params) | Productos paginados y facetas. |
serverApi.getProductBySlug(slug, params?) | Detalle de un producto. |
serverApi.getRelatedProducts(params) | Productos relacionados. |
serverApi.autocompleteProducts(params) | Sugerencias breves de búsqueda. |
serverApi.getCollections() | Colecciones visibles. |
serverApi.getCollectionBySlug(slug) | Una colección por slug. |
Filtros de productos
getProducts acepta:
page— por defecto1.pageSize— por defecto24, máximo100.sort—price_asc,price_desc,name_asc,name_desconewest.search,sellerIdylocationId.collection,collectionsycollectionId.category,categories,brand,brands.productType,productTypes,tag,tags.filters,inStock,minPriceymaxPrice.
La respuesta contiene pageIndex, pageSize, totalCount, totalPages,
products y filters.
Autocomplete
const suggestions = await serverApi.autocompleteProducts({
search: "caf",
limit: 8,
});search debe tener entre 2 y 80 caracteres. limit es 8 por defecto y no
puede superar 20.
Sin llamadas directas desde el navegador
En páginas Ecomiq, prefiere serverApi. Conserva la URL upstream y los headers
operativos fuera del bundle cliente.