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

如何将TypeScript中any类型实例始终转换为文本?

解决Any类型消息转为文本存入Oracle的问题

问题分析

直接使用String(message)转换对象时,仅Error类型能正常输出文本(Error重写了toString方法),其他对象(如Express Request、自定义实例)会被转为[object Object],无法满足审计记录的需求。

解决方案

编写通用转换函数,针对不同类型做针对性处理:

function convertMessageToString(message: any): string {
    // 处理Error类型,包含堆栈信息便于排查
    if (message instanceof Error) {
        return `${message.name}: ${message.message}\n${message.stack || ''}`;
    }
    // 处理Express Request对象,提取关键请求信息
    if (message && typeof message === 'object' && 'method' in message && 'url' in message) {
        return JSON.stringify({
            method: message.method,
            url: message.url,
            headers: message.headers,
            body: message.body,
            query: message.query
        }, null, 2);
    }
    // 处理其他对象类型(含自定义实例)
    if (typeof message === 'object' && message !== null) {
        try {
            return JSON.stringify(message, null, 2);
        } catch (e) {
            // 处理循环引用等JSON序列化失败的情况
            return String(message);
        }
    }
    // 非对象类型直接转字符串
    return String(message);
}

替换原有代码

将原来的转换逻辑替换为上述函数:

const msg: OracleDB.BindParameter = {
    dir: OracleDB.BIND_IN,
    val: convertMessageToString(message),
    type: OracleDB.STRING,
};

补充说明

  • Error类型会输出名称、消息及堆栈信息,提升审计记录的排查价值
  • Request对象仅提取核心字段,避免存储冗余内容
  • 自定义实例通过JSON序列化转为结构化文本,若遇循环引用则降级为默认字符串
  • 非对象类型(如字符串、数字)直接返回原始字符串表示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 02:22:10