我对Node.js和服务器端编程一般都很陌生,对基本的Node规则仍然有点困惑。要启动http服务器,我需要http模块。服务器本身返回一个请求和一个响应对象,(据我所知,如果我错了,请纠正我)是eventEmitters和stream对象。我仍然可以使用req.on()和res.write()等方法,而不需要stream和eventEmitter模块。但是,当我尝试使用管道函数req.pipe(res)时,会发生错误,指出未定义管道功能。我认为这是因为我没有包含流模块。为什么我可以使用某些流功能而不需要模块,而不需要其他模块?
答案 0 :(得分:0)
看起来你对Javascript也很陌生,但我会尽力解释这一点。
require
基本上导入一个对象,以便您可以使用它提供的功能。但是如果你已经有了一个对象,那么你就不需要导入(require
)因为它已经存在了。
例如,如果要创建流,则需要require
,因为创建流是您需要导入的功能。但是,您的函数仍然可以使用stream
作为参数并使用它,因为它已经存在。
const Stream = require('stream');
// need to require stream since we'd like to use it to create an object
const mystream = new Stream();
-
// no need to require stream here since you're given the object
function doSomethingWithStream(streamObject){
streamObject.on('data', () => { /* do something */ });
}
因此,在您的情况下,您不需要require
stream
,因为您已拥有该对象。虽然您的res
对象应该有一个管道方法(请参阅下面的示例),但它不起作用,因为管道仅适用于Readable
流到Writable
流和{{1} }是res
流(请参阅节点Writable
文档)。
Stream