Analog
On this page

API-Routen

Analog unterstützt die Definition von API-Routen, die für die Bereitstellung von Daten an die Anwendung verwendet werden können.

Definieren einer API-Route

API-Routen werden im Ordner src/server/routes definiert. API-Routen sind ebenfalls dateisystembasiert, und werden in der Entwicklung unter dem Standard-Präfix /api bereitgestellt.

export default defineEventHandler(() => ({ message: 'Hello World' }));

Definieren von XML-Inhalten

Um einen RSS-Feed für Ihre Website zu erstellen, setzen Sie den content-type auf text/xml, und Analog liefert den richtigen Inhaltstyp für die Route.

//server/routes/rss.xml.ts
export default defineEventHandler((event) => {
  const feedString = `<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
</rss>
  `;
  setHeader(event, 'content-type', 'text/xml');
  return feedString;
});

Hinweis: Legen Sie für SSG-Inhalte fest, dass Analog eine API-Route vorberechnen soll, damit sie als statischer Inhalt verfügbar ist:

// vite.config.ts
...
prerender: {
  routes: async () => {
    return [
      ...
      '/api/rss.xml',
      ...
      .
    ];
  },
  sitemap: {
    host: 'https://analog-blog.netlify.app',
  },
},

Die XML-Datei ist als statisches XML-Dokument unter /dist/analog/public/api/rss.xml verfügbar.

Benutzerdefinierter API-Präfix

Der Präfix, unter dem API-Routen offengelegt werden, kann mit dem Parameter apiPrefix konfiguriert werden, der an das Vite-Plugin analog übergeben wird.

export default defineConfig(({ mode }) => {
  return {
    plugins: [
      analog({
        apiPrefix: 'services',
      }),
    ],
  };
});

Mit dieser Konfiguration stellt Analog die API-Routen unter dem Präfix /services zur Verfügung.

Eine in src/server/routes/api/v1/hello.ts definierte Route kann nun unter /services/v1/hello aufgerufen werden.

Dynamische API-Routen

Dynamische API-Routen werden durch die Verwendung des Dateinamens als Routenpfad in eckigen Klammern definiert. Auf die Parameter kann über event.context.params zugegriffen werden.

// /server/routes/api/v1/hello/[name].ts
export default defineEventHandler(
  (event) => `Hello ${event.context.params?.['name']}!`,
);

Eine weitere Möglichkeit, auf Routenparameter zuzugreifen, besteht in der Verwendung der Funktion getRouterParam.

// /server/routes/api/v1/hello/[name].ts
export default defineEventHandler((event) => {
  const name = getRouterParam(event, 'name');
  return `Hello, ${name}!`;
});

Spezifische HTTP-Anforderungsmethode

Dateinamen können mit dem Suffix .get, .post, .put, .delete usw. versehen werden, um der jeweiligen HTTP-Anforderungsmethode zu entsprechen.

GET

// /server/routes/api/v1/users/[id].get.ts
export default defineEventHandler(async (event) => {
  const id = getRouterParam(event, 'id');
  // TODO: fetch user by id
  return `User profile of ${id}!`;
});

POST

// /server/routes/api/v1/users.post.ts
export default defineEventHandler(async (event) => {
  const body = await readBody(event);
  // TODO: Handle body and add user
  return { updated: true };
});

Die h3 JSDocs bieten weitere Informationen und Hilfsprogramme, einschließlich readBody.

Abfragen mit Abfrageparametern

Beispielabfrage /api/v1/query?param1=Analog¶m2=Angular

// routes/v1/query.ts
export default defineEventHandler((event) => {
  const { param1, param2 } = getQuery(event);
  return `Hello, ${param1} and ${param2}!`;
});

Sammelrouten

Sammelrouten sind hilfreich für die Handhabung von Ausweichrouten.

// routes/[...].ts
export default defineEventHandler((event) => `Default page`);

Handhabung von Fehlern

Wenn keine Fehler auftreten, wird ein Statuscode von 200 OK zurückgegeben. Alle nicht abgefangenen Fehler geben den HTTP-Fehler 500 Internal Server Error zurück. Um andere Fehlercodes zurückzugeben, lösen Sie mit createError eine Ausnahme aus

// routes/v1/[id].ts
export default defineEventHandler((event) => {
  const param = getRouterParam(event, 'id');
  const id = parseInt(param ? param : '');
  if (!Number.isInteger(id)) {
    throw createError({
      statusCode: 400,
      statusMessage: 'ID should be an integer',
    });
  }
  return `ID is ${id}`;
});

Zugriff auf Cookies

Analog ermöglicht das Setzen und Lesen von Cookies in serverseitigen Aufrufen.

Cookies setzen

//(home).server.ts
  return {
    products: products,
  };
};

Cookies lesen

//index.server.ts
  console.log('products cookie', cookies['products']);

  return {
    shipping: true,
  };
};

Mehr Informationen

API-Routen werden von Nitro und h3 bereitgestellt. Weitere Beispiele für die Erstellung von API-Routen findest du in den Dokumentationen zu Nitro und h3.