Node.js转换流只按原样传递数据

时间:2016-08-28 08:37:25

标签: javascript node.js stream

我正在尝试创建一个可以读取Markdown文本并将其转换为HTML的Node.js应用程序。为了实现这一点,我想创建一个转换流,一次获取一个char,计算含义,然后返回它的HTML版本。

因此,例如,如果我传递变换流a *,它应该返回ibm-bluemix(或<b>)。

然而,转换流实际上并不转换数据,无论我推送它,它只是像我推动它一样回来,当我将</b>语句放入流的转换方法时,我看到没有输出,好像甚至没有调用该方法。

这是Stream的文件:

console.log

使用Stream的示例文件:

module.exports = function returnStream() {

const Transform = require('stream').Transform;

let trckr = {
    bold: false
};

const compiler = new Transform({
    transform(chunk, encoding, done) {
        const input = chunk.toString();
        console.log(input); // No output
        let output;

        switch (input) {
          case '*':
            if (trckr.bold === true) {
              output = '</b>';
              trckr.bold = false;
            } else {
              output = '<b>';
              trckr.bold = true;
            }

            break;

        default:
            output = input;
    }

    done(null, output);
  }
});

  return compiler;

};

谢谢!

1 个答案:

答案 0 :(得分:1)

done(null, output)transformS.push()执行完全相同的功能:它们将数据推送到Transform流的可读(输出)端。您需要做的不是调用transformS.push(),而是使用transformS.write('*')写入转换流的可写(输入)端。

我还应该指出,您不应该对转换函数中chunk的内容做出假设。它可以是单个字符或一堆字符(在这种情况下,input 可能永远等于'*')。