javascript - 无法正确编码前置记录器

标签 javascript node.js stream console

我有一个简单的函数,它将在每行的开头添加所需的字符串。我可以使用流来进行此操作,但在某些情况下,使用 console.log() 类型的构造也很方便。

这是函数:

//接受一个要前置的字符串和一个要前置的流:

exports.lp = function (str, strm) {
    return function prependLog() {
        var args = Array.from(arguments);
        var hasNonWhitespace = args.some(function (a) {
            var str = String(a);
            return str.length > 0 && /\S/g.test(str);
        });
        if (hasNonWhitespace) {
            strm.write(str);
        }
        args.forEach(function (s, i) {
            String(s).split('\n').forEach(function (s, i) {
                if (i < 1) {
                    strm.write(s + ' ');
                }
                else {
                    strm.write('\n' + str + s);
                }
            });
        });
        strm.write('\n');
    };
};

使用方法如下:

const {lp} = require('log-prepend');
const fn = lp(' [foobar] ', process.stdout);


fn('\n');
fn();
fn();
fn('','','');
fn('log1', 'log2\n3',4,5 + '\n55');
fn('a','b','c');

这是上面的输出:

 [foobar] 



 [foobar] log1 log2 
 [foobar] 34 5 
 [foobar] 55
 [foobar] a b c 

问题是,对于没有非空白字符的空行,它通常可以工作,但是当我包含换行符时,它会输出 [foobar],即使该行上没有任何内容。

我不明白为什么我的函数对于没有非空白的行不省略 [foobar] 。确切地说,是上面的第一个 [foobar] 实例让我感到困惑。

最佳答案

遵循这里的逻辑有点困难,但这是否是因为您希望使用第一个 forEach 函数中的索引变量,而实际上它是从第二个 forEach 函数中使用的?重命名初始变量可能会有所帮助。

关于javascript - 无法正确编码前置记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46145647/

相关文章:

node.js - 我不在代理后面,但在使用 npm 安装软件包时仍然遇到错误

c# - 进行网络 I/O 时 Stream.Read 是否被缓冲?

javascript - 调整浏览器大小时,SVG 顶部有空白

javascript - 如何使用 JS 或 CSS 将 TABLE 转为圆 Angular ?

javascript - 使用 &lt;script&gt; 标签提供 .cfm 文件

javascript - 强制子 div 中的文本适合父级

node.js - Passport Js 处理 HTTP API 的访客身份验证

node.js - TypeError : webpack. DefinePlugin 不是构造函数

java - ByteArrayOutputStream.toByteArray() 还是从流中读取?

node.js - 如何在nodejs中将多个转换流合并为一个