Node.js核心功能

60 阅读4分钟
  • 基础概念

    • :什么是 Node.js?它的非阻塞 I/O 和事件驱动机制是如何工作的?
    • :Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,用于服务器端开发。它的非阻塞 I/O 和事件驱动机制通过使用回调函数或 Promise 来处理异步操作,不会阻塞主线程,从而提高了程序的并发性能。当一个任务完成时,会触发对应的事件,执行相应的回调函数来处理结果。
  • 模块系统

    • :Node.js 中的模块系统是如何工作的?有哪些模块加载机制?
    • :Node.js 使用 CommonJS 模块系统,每个文件都是一个独立的模块。模块通过 require() 函数来加载其他模块,module.exportsexports 用于导出模块中的函数或变量。模块加载机制包括先查找核心模块,然后查找文件模块(按照特定的目录顺序和文件后缀顺序查找)。
  • 网络编程

    • :如何使用 Node.js 创建一个 HTTP 服务器?请举例说明。
    • :可以使用 Node.js 自带的 http 模块来创建 HTTP 服务器。例如:
const http = require('http');
const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello World\n');
});
server.listen(3000, '127.0.0.1', () => {
  console.log('Server running at http://127.0.0.1:3000/');
});

这段代码创建了一个简单的 HTTP 服务器,监听 3000 端口,当客户端请求时,返回 “Hello World”。

  • 文件操作类

    • :如何使用 Node.js 进行文件读取、写入和删除操作?请举例说明。
    • :可以使用 Node.js 的 fs 模块来进行文件操作。例如,读取文件:
const fs = require('fs');
fs.readFile('file.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log(data);
});

写入文件:

const fs = require('fs');
fs.writeFile('file.txt', 'Hello World', (err) => {
  if (err) throw err;
  console.log('File written successfully');
});

删除文件:

const fs = require('fs');
fs.unlink('file.txt', (err) => {
  if (err) throw err;
  console.log('File deleted successfully');
});

这些操作都是异步的,也有对应的同步方法,如 `fs.readFileSync()`、`fs.writeFileSync()`、`fs.unlinkSync()`。

  • 数据库操作

    • :如何使用 Node.js 连接和操作 MongoDB 数据库?请举例说明。
    • :可以使用 mongodb 驱动库来连接和操作 MongoDB 数据库。例如,连接数据库并插入一条数据:
const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:27017';
const dbName = 'mydatabase';
MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }, (err, client) => {
  if (err) throw err;
  const db = client.db(dbName);
  const collection = db.collection('mycollection');
  collection.insertOne({ name: 'John', age: 30 }, (err, result) => {
    if (err) throw err;
    console.log('Document inserted successfully');
    client.close();
  });
});

查询数据:

collection.find({}).toArray((err, docs) => {
  if (err) throw err;
  console.log(docs);
  client.close();
});
  • 进程管理

    • :如何在 Node.js 中创建和管理子进程?有什么应用场景?
    • :可以使用 child_process 模块来创建和管理子进程。例如,使用 spawn() 方法创建子进程:
const { spawn } = require('child_process');
const ls = spawn('ls', ['-lh', '/usr']);
ls.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});
ls.stderr.on('data', (data) => {
  console.log(`stderr: ${data}`);
});
ls.on('close', (code) => {
  console.log(`child process exited with code ${code}`);
});

应用场景包括执行系统命令、调用其他程序、进行耗时的计算等。

  • 异步编程

    • :在 Node.js 中有哪些异步编程模式?它们的优缺点是什么?
    • :Node.js 中的异步编程模式包括回调函数、Promise 和 async/await。回调函数是最基本的异步模式,但容易出现回调地狱,导致代码难以维护。Promise 提供了一种更清晰的异步处理方式,可以避免回调地狱,但仍然需要处理嵌套问题。async/await 是基于 Promise 的语法糖,使异步代码看起来像同步代码,提高了代码的可读性和可维护性。

以下是 Node.js 的一些核心 API:

  • Buffer 模块 :用于处理二进制数据。Buffer 是一个类似数组的对象,用于存储原始数据。可以使用 Buffer.alloc()Buffer.from() 等方法创建 Buffer 实例,进行数据的读写和转换。
  • Events 模块 :提供了 EventEmitter 类,用于处理事件驱动编程。通过 on() 方法监听事件,emit() 方法触发事件。
  • Fs 模块 :用于文件系统操作,如读取、写入、删除文件和目录等。
  • Http 模块 :用于创建 HTTP 服务器和客户端,处理 HTTP 请求和响应。
  • Os 模块 :提供了操作系统相关的实用工具函数,如获取操作系统信息、CPU 信息等。
  • Path 模块 :用于处理和转换文件路径。
  • Process 模块 :提供了当前 Node.js 进程的相关信息和控制方法,如获取环境变量、退出进程等。
  • Stream 模块 :提供了流的抽象接口,用于处理数据流,如可读流、可写流、双工流和变换流。
  • Url 模块 :用于 URL 的解析和格式化。
  • Util 模块 :提供了各种实用工具函数,如继承方法、格式化方法等。