nodeJs笔记(一)

nodeJs笔记(一)

  • 基础知识
    • 什么是nodejs?
    • nodejs的生态系统结构
    • nodejs的工作原理
      • V8 JavaScript 引擎:
      • libuv:异步 I/O 与事件循环引擎:
      • 事件循环 (Event Loop) 的详细阶段:
      • 非阻塞 I/O 的工作流程 (以 fs.readFile 为例):
      • 单线程与高并发:
      • 核心依赖库:
      • 工作原理全景图
      • 关键点:
    • node.js的优缺点
      • 核心优势 (优点)
        • 高性能与高并发 (I/O 密集型场景):
          • 核心原理:
          • 结果:
        • 开发效率高:
          • 单一语言 (JavaScript/TypeScript):
          • NPM 庞大生态:
          • 轻量灵活:
          • 快速迭代:
        • 事件驱动、异步编程模型:
          • 天然适合实时应用:
          • 流式数据处理:
        • 跨平台:
        • 活跃的社区和持续发展:
        • 微服务/Serverless 友好:
          • 轻量快速启动:
          • 易于构建 API 网关/中间件:
      • 主要劣势 (缺点)
        • 不适合 CPU 密集型任务:
          • 核心问题:
          • 后果:
          • Worker Threads:
          • 子进程 (child_process/cluster):
          • 用 C++ 编写原生插件:
          • 将任务拆解为小片段:
        • 回调地狱 (Callback Hell) / 异步流程复杂性:
          • 历史问题:
          • 现代解决方案:
        • 单点故障风险 (相对):
          • 缓解方案:
        • 频繁的 API 变更 (曾是个问题):
          • 历史问题:
          • 现状:
        • 代码质量与依赖风险 (NPM 双刃剑):
          • NPM 模块质量参差不齐:
          • 依赖膨胀:
          • 缓解方案:
        • 深度理解要求:
      • 对比表
      • 比较后总结:
        • Node.js 是王者:
        • Node.js 需谨慎或回避:
    • Node.js能做哪些事情
      • 1. 构建 Web 服务器和 API (最常见用途)
        • 后端服务:
        • RESTful API:
        • GraphQL API:
        • 实时 Web 应用:
        • 服务器端渲染 (SSR):
        • 微服务架构:
      • 2. 命令行工具 (CLI) 和开发工具
        • 构建工具:
        • 脚手架工具:
        • 实用脚本:
        • DevOps 工具:
      • 3. 实时应用程序
        • 聊天应用:
        • 推送通知服务:
        • 在线游戏:
        • 协作平台:
        • 金融交易平台:
      • 4. 数据处理和流
        • 数据流处理:
        • API 代理/网关:
        • 数据抓取 (爬虫):
      • 5. 云服务和 Serverless
        • Serverless 函数:
        • 云原生应用:
      • 6. 桌面应用程序 (通过框架)
      • 7. IoT (物联网)
      • 8. API 网关和中间件
      • 9. 后端服务集成
      • 10. 工具和服务后台
      • Node.js 的核心优势 (为什么适合这些场景)
        • 非阻塞 I/O 和事件驱动:
        • 单语言 (JavaScript):
        • 庞大的生态系统 (npm):
        • 快速开发和迭代:
        • 高性能 (V8 引擎):
        • 活跃的社区:
      • Node.js 可能不是最佳选择的场景
        • CPU 密集型任务:
        • 需要强类型和复杂 OOP 的大型后端系统:
    • 第一个nodejs应用程序
      • 项目出现输出乱码的情况
    • npm包管理器的使用
      • npm概述
      • 查看npm版本
        • 升级到新版本
        • 安装单个软件包
        • 安装指定软件包版本
        • 安装所有软件包
        • 更新软件包
        • 指定安装位置
        • 卸载安装包
      • package.json文件
        • 常用参数及其作用的详细介绍
          • 1. 基础元数据
          • 2. 依赖管理
          • 3. 脚本命令(Scripts)
          • 4. 入口与配置
          • 5. 环境约束
          • 6. 发布配置
          • 7. 工作区(Monorepo 支持)
          • 关键注意事项
      • package.json文件和package-lock.json文件的作用
        • package.json
        • package-lock.json
        • 二者协作流程
        • 常见误区
        • 总结
        • 最佳实践:

nodejs的下载安装本文不再赘述

基础知识

什么是nodejs?

什么是nodejs?
Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,它能够让JavaScript脚本运行在服务端,这使得JavaScript成为与PHP、Python等服务端语言平起平坐的脚本语言。

Node.js目前支持现在大部分的主流浏览器,包括Chrome、Microsoft Edge和Opera等。

nodejs的生态系统结构

它的生态系统主要由标准库(核心模块)、中间层(社区模块/框架) 和 底层库(依赖库/底层引擎)这3部分组成,

它们之间的关系可以形象地理解为:
底层库:地基和建筑核心结构(如钢筋水泥)。

标准库:建筑主体结构和标准化的房间、水电接口(API)。

中间层:内部精装修、家具、智能家居系统、各种功能房间(基于标准结构扩展)。

标准库(Node standard library):提供了开发人员能够直接进行调用并使用的一些API,如http模块、stream流模块、fs文件系统模块等,可以使用JavaScript代码直接调用。 
中间层(Node binding):由于Node.js的底层库采用C/C++实现,而标准库中的JavaScript代码无法直接与C/C++进行通信,因此提供了中间层,它在标准库和底层库之间起到了桥梁的作用,它封装了底层库中V8引擎和libuv等的实现细节,并向标准库提供基础API服务。
底层库(C/C++实现):底层库是Node.js运行的关键,它由C/C++实现,包括V8引擎、libuv、C-ares、OpenSSL、zlib等,它们的主要作用如下。

  1. 标准库 (Node.js Core Modules / Standard Library)

定义: 这是 Node.js 自带的、开箱即用 的一组 JavaScript 模块。它们随 Node.js 运行时一起安装,不需要通过 npm 额外安装。

位置: 它们是 Node.js 源代码的一部分,通过 require 函数直接引入(不需要路径,直接用模块名)。

目的: 提供基础、核心的功能,让开发者能够进行 I/O 操作、网络通信、文件处理、进程管理等底层操作,而无需自己从头实现。

特点:
稳定可靠: 经过严格测试,是 Node.js 运行时的基石。
高性能: 许多模块底层是用 C/C++ 实现并通过 JavaScript 暴露接口(如 crypto, zlib, fs 的部分操作)。
异步优先: 遵循 Node.js 的非阻塞 I/O 模型,大部分 API 都提供回调或 Promise 版本。
跨平台: 封装了不同操作系统的差异,提供一致的 API。

常见且重要的标准库模块示例:
fs:文件系统操作(读/写文件、目录)。
http / https:创建 HTTP(S) 服务器和客户端。
path:处理文件和目录路径。
os:提供操作系统相关信息。
events:实现事件发射器模式(Node.js 异步事件驱动的基础)。
stream:处理流式数据(高效处理大文件或连续数据)。
crypto:提供加密功能(哈希、加解密、签名等)。
zlib:提供压缩和解压功能。
net:提供底层的网络通信(TCP)。
dgram:提供 UDP 数据报通信。
child_process:创建和管理子进程。
cluster:利用多核 CPU 创建子进程(集群)。
url:解析和格式化 URL。
querystring:解析和格式化 URL 查询字符串。
util:提供实用工具函数(如继承、类型检查、回调转 Promise)。
buffer:处理二进制数据流。
timers (setTimeout, setInterval, setImmediate):定时器功能。
console:基本的控制台输出。

const fs = require('fs'); // 引入文件系统模块
const http = require('http'); // 引入 HTTP 模块

// 使用 fs 读取文件
fs.readFile('file.txt', 'utf8', (err, data) => {
   
   
  if (err) throw err;
  console.log(data);
});

// 使用 http 创建服务器
const server = http.createServer((req, res) => {
   
   
  res.writeHead(200, {
   
   'Content-Type': 'text/plain'});
  res.end('Hello World from Node.js Core!');
});
server.listen(3000);
  1. 中间层 (Middleware Layer / Community Modules & Frameworks)

定义: 这是由 Node.js 社区(开发者、公司) 构建的、运行在 Node.js 标准库之上的一大层生态系统。主要通过 npm (Node Package Manager) 进行分发和安装。这包括了各种框架、库、工具和中间件。

位置: 安装在项目的 node_modules 目录下,通过 require 或 import 引入(通常需要路径或包名)。

目的: 解决特定领域的问题、提供更高层次的抽象、简化开发流程、实现特定功能、遵循特定架构模式。

特点:
极其丰富多样: npm 仓库拥有数百万个包,覆盖了 Web 开发、数据库、测试、工具、CLI、桌面应用等几乎所有方面。
提高开发效率: 避免重复造轮子,快速构建应用。
专业化: 提供针对特定任务(如路由、模板渲染、ORM、身份验证、日志)的优化方案。
社区驱动: 更新快,生态活跃,但质量参差不齐(需谨慎选择)。
依赖管理: 通过 package.json 和 npm/yarn/pnpm 管理。

主要类别和示例:

Web 框架: 提供路由、中间件、模板引擎集成、错误处理等 Web 开发基础设施。
Express.js:最流行的、极简灵活的 Web 框架。
Koa.js:由 Express 原班人马打造,更现代,基于 async/await。
NestJS:高度结构化、面向模块、依赖注入、支持 TypeScript 的企业级框架。
Fastify:强调高性能和低开销的框架。
Hapi.js:配置驱动的框架,适合大型应用。
数据库 ORM/ODM: 简化数据库操作,将数据库记录映射为 JavaScript 对象。
Sequelize (SQL: PostgreSQL, MySQL, SQLite 等)。
TypeORM (SQL & NoSQL, 支持 TypeScript)。
Mongoose (MongoDB)。
Prisma (下一代 ORM,类型安全,自动迁移)。

模板引擎: 动态生成 HTML。
EJS (Embedded JavaScript)。
Pug (Jade)。
Handlebars。

中间件 (Middleware): 处理 HTTP 请求/响应生命周期的函数(通常在框架如 Express/Koa 中使用)。
body-parser / koa-bodyparser:解析请求体 (JSON, Form Data)。
cookie-parser / koa/cookies:解析 Cookie。
compression:响应压缩 (gzip)。
morgan / winston / bunyan:HTTP 请求日志记录。
helmet:设置安全相关的 HTTP 头。
cors:处理跨域资源共享 (CORS)。
passport.js / auth0:身份验证和授权。
express-session / koa-session:会话管理。

实用工具库:
Lodash / Underscore.js:提供大量实用的函数式编程工具函数。
Axios / node-fetch:更强大易用的 HTTP 客户端 (替代标准库的 http/https 客户端)。
Moment.js (逐渐被替代) / Luxon / date-fns:日期时间处理。
Joi / Zod / Yup:数据验证。
dotenv:加载 .env 环境变量。
Nodemailer:发送电子邮件。
Socket.IO:实现实时、双向、基于事件的通信 (WebSocket)。

测试框架:
Jest:功能全面的测试框架 (断言、Mock、覆盖率)。
Mocha:灵活的基础测试框架,常搭配 Chai (断言库) 和 Sinon (Mock/Spy) 使用。
Supertest:测试 HTTP 端点。

构建工具 / 任务运行器 / 打包器:
Webpack:模块打包器。
Parcel:零配置打包器。
Gulp / Grunt:任务自动化。
Babel:JavaScript 编译器 (转译新语法,兼容旧环境)。
TypeScript:JavaScript 的超集,添加静态类型。

使用方式:

npm install express mongoose dotenv axios
const express = require('express');
const mongoose = require('mongoose');
require('dotenv').config();
const axios = require('axios');

const app = express();

// 连接 MongoDB (使用 Mongoose - 中间层 ODM)
mongoose.connect(process.env.MONGODB_URI);

// 定义 Mongoose 模型和路由...
app.get('/api/data', async (req, res) => {
   
   
  try {
   
   
    // 使用 Axios (中间层 HTTP 客户端) 调用外部 API
    const response = await axios.get('https://api.example.com/data');
    res.json(response.data);
  } catch (error) {
   
   
    res.status(

你可能感兴趣的:(nodeJs,笔记,前端)