logologo
Start
Handbuch
Entwickler
Plugins
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Start
Handbuch
Entwickler
Plugins
API
logologo

Schnellstart

Plugin-Entwicklung: Überblick
Erstes Plugin schreiben
Projektverzeichnisstruktur

Serverseitige Entwicklung

Überblick
Plugin
Collections (Datentabellen)
Datenbankoperationen
DataSourceManager
ResourceManager
ACL-Zugriffskontrolle
Middleware
Cache
Events
Request-Kontext
Migration (Update-Skripte)
Logger (Protokollierung)
I18n (Internationalisierung)
Command (Befehlszeile)
CronJobManager
Tests

Clientseitige Entwicklung

Überblick
Plugin
Kontext
Router
ACL-Zugriffskontrolle
DataSourceManager
Ressourcen
Requests
Stile & Themes
Logger (Protokollierung)
I18n (Internationalisierung)
Tests

Sonstiges

Plugin-Update-Leitfaden
Sprachenliste
Abhängigkeitsverwaltung
Build
Previous PageRessourcen
Next PageStile & Themes
KI-Übersetzungshinweis

Diese Dokumentation wurde automatisch von KI übersetzt.

#Anfragen

NocoBase stellt einen APIClient zur Verfügung, der auf Axios basiert und es Ihnen ermöglicht, HTTP-Anfragen von überall dort zu senden, wo Sie einen Context erhalten können.

Häufige Orte, an denen Sie einen Context erhalten können, sind:

  • app.context
  • engine.context
  • plugin.context
  • model.context

#ctx.api.request()

ctx.api.request() ist die am häufigsten verwendete Methode, um Anfragen zu senden. Ihre Parameter und Rückgabewerte sind identisch mit denen von axios.request().

request<T = any, R = AxiosResponse<T>, D = any>(
  config: AxiosRequestConfig<D>,
): Promise<R>;

Grundlegende Verwendung

await ctx.api.request({
  url: 'users:list',
  method: 'get',
});

Sie können standardmäßige Axios-Anfragenkonfigurationen direkt verwenden:

await ctx.api.request({
  url: 'users:create',
  method: 'post',
  data: {
    name: 'Tao Tao',
  },
});

#ctx.api.axios

ctx.api.axios ist eine AxiosInstance, über die Sie globale Standardkonfigurationen ändern oder Anfragen-Interceptors hinzufügen können.

Standardkonfiguration ändern

axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

Weitere verfügbare Konfigurationen finden Sie unter Axios-Standardkonfiguration.

#Anfragen- und Antwort-Interceptors

Interceptors können Anfragen verarbeiten, bevor sie gesendet werden, oder Antworten, nachdem sie zurückgegeben wurden. Zum Beispiel können Sie damit Anfragen-Header einheitlich hinzufügen, Parameter serialisieren oder eine einheitliche Fehleranzeige bereitstellen.

#Beispiel für einen Anfragen-Interceptor

// params-Parameter mit qs serialisieren
axios.interceptors.request.use((config) => {
  config.paramsSerializer = (params) =>
    qs.stringify(params, {
      strictNullHandling: true,
      arrayFormat: 'brackets',
    });
  return config;
});

// Benutzerdefinierte Anfragen-Header
axios.interceptors.request.use((config) => {
  config.headers['Authorization'] = `Bearer token123`;
  config.headers['X-Hostname'] = 'localhost';
  config.headers['X-Timezone'] = '+08:00';
  config.headers['X-Locale'] = 'zh-CN';
  config.headers['X-Role'] = 'admin';
  config.headers['X-Authenticator'] = 'basic';
  config.headers['X-App'] = 'sub1';
  return config;
});

#Beispiel für einen Antwort-Interceptor

axios.interceptors.response.use(
  (response) => response,
  (error) => {
    // Bei Anfragen-Fehlern eine einheitliche Benachrichtigung anzeigen
    ctx.notification.error({
      message: 'Anfragen-Antwortfehler',
    });
    return Promise.reject(error);
  },
);

#Benutzerdefinierte Anfragen-Header des NocoBase Servers

Im Folgenden sind die vom NocoBase Server unterstützten benutzerdefinierten Anfragen-Header aufgeführt, die für Multi-App-, Internationalisierungs-, Multi-Rollen- oder Multi-Authentifizierungs-Szenarien verwendet werden können.

HeaderBeschreibung
X-AppGibt die aktuell aufgerufene App in Multi-App-Szenarien an
X-LocaleAktuelle Sprache (z. B. zh-CN, en-US)
X-HostnameHostname des Clients
X-TimezoneZeitzone des Clients (z. B. +08:00)
X-RoleAktuelle Rolle
X-AuthenticatorAktuelle Benutzerauthentifizierungsmethode

💡 Tipp
Diese Anfragen-Header werden normalerweise automatisch von Interceptors injiziert und müssen nicht manuell gesetzt werden. Nur in speziellen Szenarien (wie Testumgebungen oder Multi-Instanz-Szenarien) müssen Sie sie manuell hinzufügen.

#Verwendung in Komponenten

In React-Komponenten können Sie das Context-Objekt über useFlowContext() abrufen und dann ctx.api aufrufen, um Anfragen zu senden.

import { useFlowContext } from '@nocobase/client';

const MyComponent = () => {
  const ctx = useFlowContext();

  const fetchData = async () => {
    const response = await ctx.api.request({
      url: '/api/posts',
      method: 'get',
    });
    console.log(response.data);
  };

  useEffect(() => {
    fetchData();
  }, []);

  return <div>Wird geladen...</div>;
};

#Verwendung mit useRequest von ahooks

In der Praxis können Sie den von ahooks bereitgestellten useRequest-Hook verwenden, um den Lebenszyklus und den Status von Anfragen bequemer zu verwalten.

import { useFlowContext } from '@nocobase/client';
import { useRequest } from 'ahooks';

const MyComponent = () => {
  const ctx = useFlowContext();

  const { data, loading, error, refresh } = useRequest(() =>
    ctx.api.request({
      url: 'posts:list',
      method: 'get',
    }),
  );

  if (loading) return <div>Wird geladen...</div>;
  if (error) return <div>Anfragen-Fehler: {error.message}</div>;

  return (
    <div>
      <button onClick={refresh}>Aktualisieren</button>
      <pre>{JSON.stringify(data?.data, null, 2)}</pre>
    </div>
  );
};

Dieser Ansatz macht die Anfragen-Logik deklarativer und verwaltet Ladezustände, Fehlerbehandlung und Aktualisierungslogik automatisch, was sich sehr gut für die Verwendung in Komponenten eignet.