logologo
Start
Handbuch
Entwicklung
Plugins
API
Startseite
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Start
Handbuch
Entwicklung
Plugins
API
Startseite
logologo
RunJS Übersicht
Module importieren
Rendern im Container

Globale Variablen

window
document
navigator

ctx

ctx.blockModel
ctx.collection
ctx.collectionField
ctx.dataSource
ctx.dataSourceManager
ctx.element
ctx.exit()
ctx.exitAll()
ctx.filterManager
ctx.form
ctx.getModel()
ctx.getValue()
ctx.getVar()
ctx.i18n
ctx.importAsync()
ctx.initResource()
ctx.libs
ctx.location
ctx.logger
ctx.makeResource()
ctx.message
ctx.modal
ctx.model
ctx.notification
ctx.off()
ctx.on()
ctx.openView()
ctx.render()
ctx.request()
ctx.requireAsync()
ctx.resource
ctx.route
ctx.router
ctx.setValue()
ctx.sql
ctx.t()
ctx.view
Previous Pagectx.render()
Next Pagectx.requireAsync()
KI-Übersetzungshinweis

Dieses Dokument wurde von KI übersetzt. Für genaue Informationen lesen Sie bitte die englische Version.

#ctx.request()

Startet eine authentifizierte HTTP-Anfrage in RunJS. Die Anfrage überträgt automatisch die baseURL, den Token, die locale, die role usw. der aktuellen Anwendung und folgt der Logik für Anfrage-Interceptors und die Fehlerbehandlung der Anwendung.

#Anwendungsfälle

Anwendbar auf jedes Szenario in RunJS, in dem eine entfernte HTTP-Anfrage initiiert werden muss, wie z. B. JSBlock, JSField, JSItem, JSColumn, Workflow, Verknüpfungen, JSAction usw.

#Typdefinition

request(options: RequestOptions): Promise<AxiosResponse<any>>;

RequestOptions erweitert die AxiosRequestConfig von Axios:

type RequestOptions = AxiosRequestConfig & {
  skipNotify?: boolean | ((error: any) => boolean);  // Ob globale Fehlermeldungen bei einem Fehlschlagen der Anfrage übersprungen werden sollen
  skipAuth?: boolean;                                 // Ob die Authentifizierungs-Weiterleitung übersprungen werden soll (z. B. keine Weiterleitung zur Login-Seite bei 401)
};

#Häufige Parameter

ParameterTypBeschreibung
urlstringAnfrage-URL. Unterstützt den Ressourcen-Stil (z. B. users:list, posts:create) oder eine vollständige URL
method'get' | 'post' | 'put' | 'patch' | 'delete'HTTP-Methode, Standard ist 'get'
paramsobjectAbfrageparameter, die in die URL serialisiert werden
dataanyAnfragetext (Body), verwendet für post/put/patch
headersobjectBenutzerdefinierte Anfrage-Header
skipNotifyboolean | (error) => booleanWenn true oder die Funktion true zurückgibt, erscheint bei einem Fehler keine globale Fehlermeldung
skipAuthbooleanWenn true, lösen 401-Fehler usw. keine Authentifizierungs-Weiterleitung aus (z. B. Weiterleitung zur Login-Seite)

#Ressourcen-Stil URL

Die NocoBase Ressourcen-API unterstützt ein Kurzformat im Stil Ressource:Aktion:

FormatBeschreibungBeispiel
collection:actionCRUD für eine einzelne Sammlungusers:list, users:get, users:create, posts:update
collection.relation:actionVerknüpfte Ressourcen (erfordert die Übergabe des Primärschlüssels via resourceOf oder URL)posts.comments:list

Relative Pfade werden mit der baseURL der Anwendung (normalerweise /api) verkettet; Cross-Origin-Anfragen müssen eine vollständige URL verwenden, und der Zieldienst muss für CORS konfiguriert sein.

#Antwortstruktur

Der Rückgabewert ist ein Axios-Antwortobjekt. Häufige Felder sind:

  • response.data: Antwortkörper (Response Body)
  • Listen-Schnittstellen geben normalerweise data.data (Array von Datensätzen) + data.meta (Paginierung usw.) zurück
  • Schnittstellen für einzelne Datensätze/Erstellen/Aktualisieren geben den Datensatz meist in data.data zurück

#Beispiele

#Listenabfrage

const { data } = await ctx.request({
  url: 'users:list',
  method: 'get',
  params: { pageSize: 10, page: 1 },
});

const rows = Array.isArray(data?.data) ? data.data : [];
const meta = data?.meta; // Paginierung und andere Informationen

#Daten übermitteln

const res = await ctx.request({
  url: 'users:create',
  method: 'post',
  data: { nickname: 'Max Mustermann', email: 'max@example.com' },
});

const newRecord = res?.data?.data;

#Mit Filterung und Sortierung

const res = await ctx.request({
  url: 'users:list',
  method: 'get',
  params: {
    pageSize: 20,
    sort: ['-createdAt'],
    filter: { status: 'active' },
  },
});

#Fehlermeldung überspringen

const res = await ctx.request({
  url: 'some:action',
  method: 'get',
  skipNotify: true,  // Bei Fehler keine globale Nachricht anzeigen
});

// Oder basierend auf dem Fehlertyp entscheiden
const res2 = await ctx.request({
  url: 'some:action',
  method: 'get',
  skipNotify: (err) => err?.name === 'CanceledError',
});

#Cross-Origin-Anfrage

Wenn eine vollständige URL verwendet wird, um andere Domänen anzufragen, muss der Zieldienst so konfiguriert sein, dass er CORS für den Ursprung der aktuellen Anwendung zulässt. Wenn die Zielschnittstelle einen eigenen Token benötigt, kann dieser über die Header übergeben werden:

const res = await ctx.request({
  url: 'https://api.example.com/v1/data',
  method: 'get',
});

const res2 = await ctx.request({
  url: 'https://api.other.com/items',
  method: 'get',
  headers: {
    Authorization: 'Bearer <ziel_service_token>',
  },
});

#Anzeige mit ctx.render

const { data } = await ctx.request({
  url: 'users:list',
  method: 'get',
  params: { pageSize: 5 },
});
const rows = Array.isArray(data?.data) ? data.data : [];

ctx.render([
  '<div style="padding:12px">',
  '<h4>' + ctx.t('Benutzerliste') + '</h4>',
  '<ul>',
  ...rows.map((r) => '<li>' + (r.nickname ?? r.username ?? '') + '</li>'),
  '</ul>',
  '</div>',
].join(''));

#Hinweise

  • Fehlerbehandlung: Ein Fehlschlagen der Anfrage löst eine Ausnahme aus, und standardmäßig wird eine globale Fehlermeldung angezeigt. Verwenden Sie skipNotify: true, um Fehler selbst abzufangen und zu behandeln.
  • Authentifizierung: Anfragen an dieselbe Domäne tragen automatisch den Token, die Sprache (Locale) und die Rolle des aktuellen Benutzers. Cross-Origin-Anfragen erfordern, dass das Ziel CORS unterstützt und der Token bei Bedarf in den Headern übergeben wird.
  • Ressourcenberechtigungen: Anfragen unterliegen den ACL-Beschränkungen (Access Control List) und können nur auf Ressourcen zugreifen, für die der aktuelle Benutzer eine Berechtigung hat.

#Verwandte Themen

  • ctx.message - Anzeige von leichten Hinweisen nach Abschluss der Anfrage
  • ctx.notification - Anzeige von Benachrichtigungen nach Abschluss der Anfrage
  • ctx.render - Rendern von Anfrageergebnissen in die Benutzeroberfläche
  • ctx.makeResource - Erstellen eines Ressourcen-Objekts für verkettetes Laden von Daten (Alternative zu ctx.request)