" .on" in" process.stdin.on"对于?

时间:2017-01-14 22:50:16

标签: node.js stdin

我是Node.js的新手。

我在他们的网站上,我有一些来自朋友的示例代码,包含" stdin"。 我去搜索stdin是什么,我现在知道了。 Altough,在Node.js的网站上,他们使用" stdin.on "。

我找不到任何关于它的东西。也许有人可以填补我的权利?! :)

process.stdin.setEncoding('utf8');

process.stdin.on('readable', () => {
  var chunk = process.stdin.read();
  if (chunk !== null) {
    process.stdout.write(`data: ${chunk}`);
  }
});

process.stdin.on('end', () => {
  process.stdout.write('end');
});

我希望有人可以在非专家级别向我解释这个问题。 我知道我可以买一本书并开始阅读,但我在业余时间这样做是为了好玩......

4 个答案:

答案 0 :(得分:3)

最近我一直在努力解决同样的问题,经过一些挖掘后我发现根据Node.Js documentation

  

process对象是EventEmitter

的实例

如果您转到EventEmitter documentation,可以在那里找到有关API和on功能的更多信息:

  

将侦听器函数添加到名为eventName的事件的侦听器数组的末尾。不进行检查以查看是否已添加侦听器。传递相同的eventName和listener组合的多个调用将导致多次添加和调用侦听器。

在我的情况下,它正在查看Node的TypeScript定义文件,该文件使我沿着该路线走下去,使用以下API方法:

export class EventEmitter {
    addListener(event: string | symbol, listener: Function): this;
    // Here is it
    on(event: string | symbol, listener: Function): this;
    once(event: string | symbol, listener: Function): this;
    removeListener(event: string | symbol, listener: Function): this;
    removeAllListeners(event?: string | symbol): this;
    setMaxListeners(n: number): this;
    getMaxListeners(): number;
    listeners(event: string | symbol): Function[];
    emit(event: string | symbol, ...args: any[]): boolean;
    listenerCount(type: string | symbol): number;
    // Added in Node 6...
    prependListener(event: string | symbol, listener: Function): this;
    prependOnceListener(event: string | symbol, listener: Function): this;
    eventNames(): (string | symbol)[];
}

答案 1 :(得分:1)

process.stdin属性返回连接到stdin的net.Socket Stream^

它从stream.Duplex扩展而来,使得它既可读又可写。 ^

所有流都是EventEmitter的实例。 ^

现在我们已经了解了这一点,让我们看看您可以在process.stdin中找到什么。

.addListener(eventName, listener) ^

  • .on(eventName, listener)的别名

.on(eventName, listener) ^

  • listener函数添加到名为eventName的事件的侦听器数组的末尾

.once(eventName, listener) ^

  • 为名为listener的事件添加了一次eventName函数。下次触发eventName时,该listener被删除然后调用。

.off(eventName, listener) ^

  • 从名为listener的事件的侦听器数组中删除指定的eventName

.removeListener(eventName, listener) ^

  • .off(eventName, listener)的别名

这意味着您可以附加“侦听器”,以响应stdin发出的各种事件来执行操作。

例如,当用户按下一个键时。它类似于DOM事件,例如onClick="myFunction()"属性,object.onclickjQuery.on('click')

答案 2 :(得分:0)

.on()用于监听事件。这就像在HTML按钮上监听click事件。实际上,jQuery在DOM事件中具有完全相同的用法。

答案 3 :(得分:0)

不确定这个问题是否需要另一个答案,但很简单 process.stdin.on(); 只是(如上所述)只是一个侦听器 - 它正在侦听“数据”事件,当用户在键盘。当 .on() 听到事件时,您可以通过提供回调来做某事。在幕后,Node 会将用户输入传递给您的回调。

这是一个非常简单的例子:

// Listen for the 'data' event, then call myCallback...
process.stdin.on('data', myCallback);

let myCallback = (userInput) => {
// In Node the userInput is a Buffer class instance, so .toString() it
// It also comes with a new line character, so let's trim it off         
let input = userInput.toString().trim();
// Now do whatever you want with the userInput...
};

通常,您还会编写一个发射器来触发您正在侦听的事件,例如:

myEmitter.emit('myEvent', 'The event happened!');

但您不需要 - 在这种情况下,只要您在键盘上按“回车”,Node 就会为您发出事件。你所做的就是用 .on() 倾听它,然后做一些回应。