我是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');
});
我希望有人可以在非专家级别向我解释这个问题。 我知道我可以买一本书并开始阅读,但我在业余时间这样做是为了好玩......
答案 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.onclick
或jQuery.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()
倾听它,然后做一些回应。