1、想创建一个文件,通过流的方式读取数据,该怎么做?()
A、调用fs.open方法
B、调用fs.read方法
C、调用fs.readFile方法
D、调用fs.createReadStream
创建一个Readable
流,然后监听data事件处理数据
1、D
知识点:流式读取文件
解析:fs模块的createReadStream
可以创建一个fs.ReadStream实例,ReadStream
实现了stream.Readable接口,stream.Readable在数据到达时发射data事件,通过给data关联callback就可以处理数据。
当使用createReadStream
创建一个fs.ReadStream
实例后,可以通过监听data
事件来处理数据。下面是一个代码案例:
const fs = require('fs');
const readStream = fs.createReadStream('file.txt');
readStream.on('data', (chunk) => {
console.log(`Received ${chunk.length} bytes of data.`);
// 在这里可以对数据进行处理
});
readStream.on('end', () => {
console.log('Data reading finished.');
});
readStream.on('error', (err) => {
console.error('Error occurred:', err);
});
在上面的例子中,我们先创建了一个fs.ReadStream
实例,传入了要读取的文件路径作为参数。然后监听data
事件,在事件的回调函数中处理每次接收到的数据块。最后,我们还监听了end
事件,表示数据读取完成,以及error
事件,以处理任何可能发生的错误。
2、想知道一个stream.Writable实例发生了什么错误该怎么办?()
A、调用error方法
B、监听error
事件,提供一个callback
,callback
的参数是Error
实例,保存了错误信息
C、不可能发生错误
D、监听finish事件,然后再调用error方法判断是否发生了错误
2、B
知识点:处理流的错误
解析:stream.Writable
有一个名为"error"的事件,在发生错误时会发射,它对应的callback的参数是Error
对象,保存了错误信息,我们可以直接在callback
中访问具体的错误信息。
const fs = require('fs');
const writeStream = fs.createWriteStream('output.txt');
writeStream.on('error', (err) => {
console.error('Error occurred:', err.message);
// 可以在这里访问具体的错误信息,如 err.code、err.stack 等
});
writeStream.write('Hello, World!', 'utf8');
writeStream.end();
在上面的例子中,我们创建了一个 fs.WriteStream
实例,用于向文件 output.txt
中写入数据。当发生错误时,error
事件将被触发,回调函数中的 err
参数将是一个 Error
对象,其中包含有关错误的详细信息。在上面的示例中,我们通过 err.message
访问了错误信息,你还可以使用其他 Error
对象的属性来获取更多的错误细节,比如 err.code
、err.stack
等。
3、在Node.js代码中要加载http模块,怎么做()
A、http模式是全局的,无需加载,直接使用即可
B、使用require('http')
即可
C、使用module方法
D、使用exports方法
3、B
知识点:加载模块
解析:Node.js提供了require
方法来加载模块,只需提供模块名字即可。
// 加载内置模块
const fs = require('fs');
const http = require('http');
// 加载自定义模块
const myModule = require('./myModule');
// 使用加载的模块
fs.readFile('file.txt', 'utf8', (err, data) => {
if (err) {
console.error('Error occurred:', err.message);
return;
}
console.log('File contents:', data);
});
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello, World!');
});
server.listen(3000, () => {
console.log('Server is running on port 3000');
});
console.log(myModule.myFunction());
上面的代码展示了几种不同类型的模块加载方式。首先,我们加载了两个内置模块 fs
和 http
,它们是 Node.js 默认提供的模块。然后,我们加载了一个自定义模块 myModule
,它的路径是相对于当前脚本的。最后,我们使用加载的模块进行一些操作,比如读取文件、创建 HTTP 服务器,并调用自定义模块中的函数。
4、在Node.js中,想让自定义的类具有发射事件的能力,需要继承哪个类?()
A、Events
B、events.Event
C、events.EventEmitter
D、Buffer
4、C
知识点:事件
解析:一个类继承events.EventEmitter
就拥有了事件能力,在合适的时候调用emitter.emit即可发射自定义事件。
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
// 监听自定义事件
myEmitter.on('customEvent', (arg1, arg2) => {
console.log('customEvent triggered with arguments:', arg1, arg2);
});
// 发射自定义事件
myEmitter.emit('customEvent', 'Hello', 'World');
在上面的代码中,我们定义了一个 MyEmitter
类,它继承了 events.EventEmitter
。然后我们创建了一个 myEmitter
实例,该实例就拥有了事件的能力。我们使用 on
方法来监听自定义事件 customEvent
,并在事件触发时打印出传入的参数。最后,我们使用 emit
方法来发射自定义事件 customEvent
,并传入两个参数 'Hello'
和 'World'
。
当运行上述代码时,将会输出:
customEvent triggered with arguments: Hello World
这表明自定义事件已经发射成功,并且事件回调函数被触发并接收到了传入的参数。
5、要使用node.js的http
模块创建一个http server
,需要调用哪些方法()
A、http.createClient
B、http.createServer
C、http.Server.listen
D、http.get
5、B,C
知识点:http模块
解析:使用http模块的createServer方法可以创建一个http.Server对象,再调用http.Server.listen就可以让http服务器监听到某个端口上。
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello, World!');
});
server.listen(3000, () => {
console.log('Server is running on port 3000');
});
在上面的代码中,我们使用 createServer
方法创建了一个 HTTP 服务器对象,并传入一个回调函数作为参数。这个回调函数会在每次有请求到达时被执行,可以在其中处理请求并返回响应。在本例中,我们简单地返回了一个带有 “Hello, World!” 文本的响应。
然后,我们调用 listen
方法,传入要监听的端口号(这里使用了 3000)和一个可选的回调函数。在回调函数中输出一条日志,表示服务器已经成功开始监听指定的端口。
运行上述代码后,服务器将在指定的端口上启动并等待请求。你可以通过在浏览器中访问 http://localhost:3000
来测试该服务器,将会看到 “Hello, World!” 的响应。
6、想要监听事件
,可以用下列哪些方法?()
A、emitter.addListener
B、emitter.on
C、emitter.once
D、emitter.emit
6、A,B,C
知识点:处理事件
解析:Node.js中很多类都实现了EventEmitter
接口,类的客户可以通过监听事件提供回调函数的方式来与类交互。addListener和on可以给指定的事件添加监听器(callback函数),每当事件发生时,这些callback都会被调用。而once方法给事件设置的监听器,只触发一次。
Node.js 中的许多类都实现了
EventEmitter
接口,使用事件监听器(回调函数)的方式与类进行交互。EventEmitter
提供了addListener
、on
和once
方法来给指定的事件添加监听器,每当事件发生时,这些回调函数都会被调用。once
方法设置的监听器只会触发一次。
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
// 使用 addListener 或 on 方法添加事件监听器
myEmitter.addListener('customEvent', () => {
console.log('Listener 1 called');
});
myEmitter.on('customEvent', () => {
console.log('Listener 2 called');
});
// 使用 once 方法添加只触发一次的监听器
myEmitter.once('customEvent', () => {
console.log('Listener 3 called (once)');
});
// 触发自定义事件
myEmitter.emit('customEvent');
// 再次触发自定义事件
myEmitter.emit('customEvent');
在上面的代码中,我们定义了一个 MyEmitter
类,它继承了 EventEmitter
接口。然后我们创建了一个 myEmitter
实例,并为 customEvent
事件添加了三个不同的监听器。addListener
、on
和 once
方法都可以使用来添加监听器。
接下来,我们调用 emit
方法触发了 customEvent
事件。当事件被触发时,每个添加的监听器都会按照添加顺序被调用。注意,在上面的示例中,once
方法设置的监听器只会触发一次,而 addListener
和 on
方法设置的监听器会在每次事件发生时都被调用。
运行上述代码后,将会输出以下内容:
Listener 1 called
Listener 2 called
Listener 3 called (once)
Listener 2 called
这表明添加的监听器按照添加顺序被调用,once
方法设置的监听器仅触发了一次,而其他的监听器在每次事件发生时都被调用。
7、想知道一个字符串是否包含某个字符,该怎么做?()
A、调用indexOf
,返回值不是-1就说明包含指定的字符
B、调用lastIndexOf
,返回值不是-1就说明包含指定的字符
C、调用match
方法
D、调用search
方法
7、A,B,C,D
知识点:字符串处理
解析:几种方法都可以
调用indexOf
调用 indexOf
方法会返回指定字符在字符串中第一次出现的索引位置,如果找不到则返回 -1。因此,可以根据返回值是否为 -1 来判断字符串是否包含指定的字符。下面是一个案例代码:
const str = 'Hello, World!';
const char = 'o';
const index = str.indexOf(char);
if (index !== -1) {
console.log(`The character "${char}" is found at index ${index}`);
} else {
console.log(`The character "${char}" is not found in the string`);
}
在上面的代码中,我们定义了一个字符串 str
和一个指定字符 char
。然后,我们使用 indexOf
方法找到字符 char
在字符串 str
中第一次出现的索引,并将结果保存在变量 index
中。
接下来,我们使用条件语句判断 index
是否等于 -1。如果不等于 -1,表示字符 char
存在于字符串 str
中,我们输出包含字符的消息,包括字符本身和它的索引。如果等于 -1,表示字符 char
不在字符串中,我们输出不包含字符的消息。
运行上述代码后,将会输出以下内容:
The character "o" is found at index 4
这表明字符 “o” 在字符串 “Hello, World!” 中第一次出现的索引为 4。
调用lastIndexOf
调用 lastIndexOf
方法会返回指定字符在字符串中最后一次出现的索引位置,如果找不到则返回 -1。因此,可以根据返回值是否为 -1 来判断字符串是否包含指定的字符。下面是一个案例代码:
const str = 'Hello, World!';
const char = 'o';
const lastIndex = str.lastIndexOf(char);
if (lastIndex !== -1) {
console.log(`The character "${char}" is found at last index ${lastIndex}`);
} else {
console.log(`The character "${char}" is not found in the string`);
}
在上面的代码中,我们和之前一样定义了一个字符串 str
和一个指定字符 char
。然后,我们使用 lastIndexOf
方法找到字符 char
在字符串 str
中最后一次出现的索引,并将结果保存在变量 lastIndex
中。
接下来,我们使用条件语句判断 lastIndex
是否等于 -1。如果不等于 -1,表示字符 char
存在于字符串 str
中,我们输出包含字符的消息,包括字符本身和它的最后一次出现的索引。如果等于 -1,表示字符 char
不在字符串中,我们输出不包含字符的消息。
运行上述代码后,将会输出以下内容:
The character "o" is found at last index 8
这表明字符 “o” 在字符串 “Hello, World!” 中最后一次出现的索引为 8。