logologo
Empezar
Manual
Desarrollo
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
Empezar
Manual
Desarrollo
Plugins
API
logologo

Inicio rápido

Resumen de desarrollo de plugins
Escribir el primer plugin
Estructura de directorios del proyecto

Desarrollo del lado del servidor

Visión general
Plugin
Colecciones
Operaciones de base de datos
Gestión de fuentes de datos
Gestión de recursos
Control de permisos (ACL)
Middleware
Caché
Evento
Contexto de solicitud
Migración (Script de actualización)
Registro (Logger)
Internacionalización (I18n)
Línea de comandos (Command)
Gestión de tareas programadas
Pruebas

Desarrollo del lado del cliente

Visión general
Plugin
Contexto
Enrutador (Router)
Control de permisos (ACL)
Gestión de fuentes de datos
Recurso
Solicitud
Estilos y temas
Registro (Logger)
Internacionalización (I18n)
Pruebas

Otros

Guía de actualización de plugins
Lista de idiomas
Gestión de dependencias
Compilación
Previous PageRecurso
Next PageEstilos y temas
Aviso de traducción por IA

Esta documentación ha sido traducida automáticamente por IA.

#Solicitudes

NocoBase le ofrece un APIClient basado en Axios, que puede utilizar para realizar solicitudes HTTP desde cualquier lugar donde pueda acceder a un Context.

Los lugares comunes donde puede obtener un Context incluyen:

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

#ctx.api.request()

ctx.api.request() es el método más utilizado para realizar solicitudes. Sus parámetros y valores de retorno son idénticos a los de axios.request().

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

Uso básico

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

Puede utilizar directamente las configuraciones de solicitud estándar de Axios:

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

#ctx.api.axios

ctx.api.axios es una instancia de AxiosInstance a través de la cual puede modificar las configuraciones predeterminadas globales o añadir interceptores de solicitud.

Modificar la configuración predeterminada

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

Para más configuraciones disponibles, consulte la Configuración predeterminada de Axios.

#Interceptores de solicitud y respuesta

Los interceptores le permiten procesar las solicitudes antes de que se envíen o las respuestas después de que se reciban. Por ejemplo, puede añadir encabezados de solicitud de forma consistente, serializar parámetros o mostrar mensajes de error unificados.

#Ejemplo de interceptor de solicitud

// Usar qs para serializar los parámetros params
axios.interceptors.request.use((config) => {
  config.paramsSerializer = (params) =>
    qs.stringify(params, {
      strictNullHandling: true,
      arrayFormat: 'brackets',
    });
  return config;
});

// Encabezados de solicitud personalizados
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;
});

#Ejemplo de interceptor de respuesta

axios.interceptors.response.use(
  (response) => response,
  (error) => {
    // Mostrar una notificación unificada cuando la solicitud falla
    ctx.notification.error({
      message: 'Error en la respuesta de la solicitud',
    });
    return Promise.reject(error);
  },
);

#Encabezados de solicitud personalizados del servidor NocoBase

A continuación, se muestran los encabezados de solicitud personalizados compatibles con el servidor NocoBase, que pueden utilizarse para escenarios de múltiples aplicaciones, internacionalización, múltiples roles o múltiples autenticaciones.

HeaderDescripción
X-AppEspecifica la aplicación actual a la que se accede en escenarios de múltiples aplicaciones
X-LocaleIdioma actual (ej.: zh-CN, en-US)
X-HostnameNombre de host del cliente
X-TimezoneZona horaria del cliente (ej.: +08:00)
X-RoleRol actual
X-AuthenticatorMétodo de autenticación del usuario actual

💡 Consejo
Estos encabezados de solicitud suelen ser inyectados automáticamente por los interceptores y no necesitan ser configurados manualmente. Solo en escenarios especiales (como entornos de prueba o escenarios de múltiples instancias) es necesario añadirlos manualmente.

#Uso en componentes

En los componentes de React, puede obtener el objeto de contexto a través de useFlowContext() y luego llamar a ctx.api para realizar solicitudes.

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>Cargando...</div>;
};

#Uso con useRequest de ahooks

En el desarrollo real, puede utilizar el Hook useRequest proporcionado por ahooks para manejar de forma más conveniente el ciclo de vida y el estado de las solicitudes.

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>Cargando...</div>;
  if (error) return <div>Error en la solicitud: {error.message}</div>;

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

Este enfoque hace que la lógica de las solicitudes sea más declarativa, gestionando automáticamente los estados de carga, el manejo de errores y la lógica de actualización, lo cual es muy adecuado para su uso en componentes.