Saltar al contenido
Guías

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

pages/products.index.tsx
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étodoResultado
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 defecto 1.
  • pageSize — por defecto 24, máximo 100.
  • sortprice_asc, price_desc, name_asc, name_desc o newest.
  • search, sellerId y locationId.
  • collection, collections y collectionId.
  • category, categories, brand, brands.
  • productType, productTypes, tag, tags.
  • filters, inStock, minPrice y maxPrice.

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.

En esta página