You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Joi 17.4.2校验错误信息携带异常字符,如何获取纯文本报错内容?

问题原因

你遇到的乱码字符是Joi 17版本默认开启的终端彩色输出专用ANSI转义码,error.message默认返回的是适配终端打印的带格式内容,不适合直接展示给普通用户。

解决方法

可按优先级选择以下方案:

方案1:直接从错误详情提取纯文本(最稳妥,无需修改校验逻辑)

Joi的校验错误对象内置了结构化的details数组,每个元素的message字段就是无额外格式的纯文本错误描述,直接修改错误处理逻辑即可:

if (isValidationError(error)) {
    // 仅取第一条错误,需要展示多条错误可自行用符号拼接数组内容
    const pureErrorMessage = error.details[0].message
    // 多条错误拼接写法:const pureErrorMessage = error.details.map(item => item.message).join(';')
    return new BadRequestError(pureErrorMessage)
}

执行后即可直接得到你预期的"username" is required输出。

方案2:关闭Joi彩色输出配置

如果要保留使用error.message的原有逻辑,可以关闭Joi的颜色格式化开关:

  • 单校验生效:调用validate方法时传入配置
const validationResult = workGroupValidationSchema.validate(待校验数据, {
    errors: {
        color: false
    }
})
  • 全局生效:统一配置Joi默认参数
import Joi from 'joi'
const PureTextJoi = Joi.defaults(schema => schema.options({
    errors: {
        color: false
    }
}))
// 后续所有校验schema都用PureTextJoi定义即可
export const workGroupValidationSchema = PureTextJoi.object({
    username: Joi.string().required(),
    password: Joi.string().required(),
})

内容的提问来源于stack exchange,提问作者Or Yaacov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 08:57:03