当我使用throw语句时,有什么方法可以改变错误消息的颜色吗?

时间:2018-01-22 08:51:09

标签: node.js colors console throw

我知道一些改变控制台文本颜色的工具,例如chalk。但是,当我使用throw语句来打印错误消息并需要将其删除时:

const chalk = require('chalk');

throw new Error(chalk.red('some error messages'));

失败,没有红色的错误消息:

?[31msome error messages?[39m

有没有办法更改throw语句引起的错误消息的颜色?

2 个答案:

答案 0 :(得分:0)

您确定您的控制台了解ANSI sequences吗?我的意思是,浏览器控制台可能根本不理解它们,Windows命令行仅在Windows 10中正确显示它们。

通常,您应该避免抛出ANSI颜色的错误消息,因为它可能不适用于每个系统,因此这是一种不好的做法。尽管如此,throw本身不应该破坏序列,因为它只是一串ASCII字符。

可能破坏它的是控制台本身不理解它。粘贴的内容(?[31msome error messages?[39m)与有效的ANSI颜色文本的区别仅在于使用"?"替换转义字符(ASCII代码27)。因此,我怀疑您正试图在不适合解释ANSI代码的控制台中显示文本。使用Windows 10控制台或任何Unix / Linux / MacOS X系统控制台,它将工作。在web浏览器的控制台和10之前的Windows版本中,它赢了。

如果您需要在webbrowser see this answer中使用彩色控制台输出。

答案 1 :(得分:0)

您必须将 throw() 调用放在 try/catch 块中。这样,您就可以捕获错误并使用 console.log() 对其进行格式化。

示例:

// The try/catch block
function run() {
    try {
        myAction();
    }
    catch (err) {
        console.log('%c ' + err.message, 'background: red; color: white');
    }
}

// Your action 
function myAction() {
    throw new Error('some error message');
}

现在您只需调用 run() 并在控制台中查看格式化的错误。