From 760e616d9f9fed36e24943679babac8acf44d55b Mon Sep 17 00:00:00 2001 From: YANG QIA <2013xile@gmail.com> Date: Sat, 28 Feb 2026 19:24:27 +0800 Subject: [PATCH] fix(error-handler): validation error messages are not returned correctly (#8736) * fix(error-handler): validation error messages are not returned correctly * fix: bug --- .../plugin-error-handler/src/server/server.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/plugins/@nocobase/plugin-error-handler/src/server/server.ts b/packages/plugins/@nocobase/plugin-error-handler/src/server/server.ts index 254d95e9afa..eda1ee1ba6d 100644 --- a/packages/plugins/@nocobase/plugin-error-handler/src/server/server.ts +++ b/packages/plugins/@nocobase/plugin-error-handler/src/server/server.ts @@ -7,8 +7,6 @@ * For more information, please refer to: https://www.nocobase.com/agreement. */ -import { Schema } from '@formily/json-schema'; -import { BaseError } from '@nocobase/database'; import { Plugin } from '@nocobase/server'; import lodash from 'lodash'; import { ErrorHandler } from './error-handler'; @@ -19,10 +17,11 @@ export class PluginErrorHandlerServer extends Plugin { beforeLoad() { this.registerSequelizeValidationErrorHandler(); + this.registerSQLErrorHandler(); } registerSequelizeValidationErrorHandler() { - const findFieldTitle = (instance, path, tFunc, ctx) => { + const findFieldTitle = (instance, path, ctx) => { if (!instance) { return path; } @@ -39,9 +38,11 @@ export class PluginErrorHandlerServer extends Plugin { } const field = collection.getField(path); - const fieldOptions = Schema.compile(field?.options, { t: tFunc }); + const fieldOptions = field?.options; const title = lodash.get(fieldOptions, 'uiSchema.title', path); - return title; + const re = /{{\s*t\(\s*(['"`])([^'"`]+)\1\s*\)\s*}}/g; + const parsed = re.exec(title); + return parsed?.[2] || title; }; this.errorHandler.register( @@ -52,7 +53,7 @@ export class PluginErrorHandlerServer extends Plugin { ctx.body = { errors: err.errors.map((err) => { const t = ctx.i18n.t; - const title = findFieldTitle(err.instance, err.path, t, ctx); + const title = findFieldTitle(err.instance, err.path, ctx); return { message: t(err.type, { ns: this.i18nNs, @@ -64,7 +65,9 @@ export class PluginErrorHandlerServer extends Plugin { ctx.status = 400; }, ); + } + registerSQLErrorHandler() { const unwrapSqlError = (error) => { return error?.original?.parent ?? error?.parent ?? error?.original ?? error; };