【Node.js从 0 到 1:入门实战与项目驱动】1.1 什么是 Node.js?(定义、运行环境、与浏览器 JavaScript 的区别)

文章目录

  • [1.1 什么是 Node.js?(定义、运行环境、与浏览器 JavaScript 的区别)](#1.1 什么是 Node.js?(定义、运行环境、与浏览器 JavaScript 的区别))
      • [1.1 什么是 Node.js?(定义、运行环境、与浏览器 JavaScript 的区别)](#1.1 什么是 Node.js?(定义、运行环境、与浏览器 JavaScript 的区别))
        • [1.1.1 一句话说清 Node.js:JavaScript 也能 "脱离浏览器打工"](#1.1.1 一句话说清 Node.js:JavaScript 也能 “脱离浏览器打工”)
        • [1.1.2 Node.js 的运行环境:不止 "能跑",还很能 "干活"](#1.1.2 Node.js 的运行环境:不止 “能跑”,还很能 “干活”)
        • [1.1.3 Node.js vs 浏览器 JavaScript:同一个演员,不同的 "剧本"](#1.1.3 Node.js vs 浏览器 JavaScript:同一个演员,不同的 “剧本”)
        • [1.1.4 什么时候用哪个?](#1.1.4 什么时候用哪个?)
          • [1. 什么时候用浏览器 JavaScript?](#1. 什么时候用浏览器 JavaScript?)
          • [2. 什么时候用 Node.js?](#2. 什么时候用 Node.js?)
          • [3. 核心原则:JavaScript 语法的通用性](#3. 核心原则:JavaScript 语法的通用性)

1.1 什么是 Node.js?(定义、运行环境、与浏览器 JavaScript 的区别)

1.1 什么是 Node.js?(定义、运行环境、与浏览器 JavaScript 的区别)

1.1.1 一句话说清 Node.js:JavaScript 也能 "脱离浏览器打工"
  • Node.js 是一个强大的 JavaScript 运行环境,它让 JavaScript 从浏览器中"解放"出来,直接在操作系统层面执行任务。
核心概念解析

Node.js 的核心优势在于其事件驱动和非阻塞 I/O 模型 ,这使得它特别适合处理高并发服务器端应用

  • 事件驱动 :系统基于事件循环(event loop)工作。当发生 I/O 操作(如读取文件或网络请求)时,Node.js 不会阻塞主线程,而是注册一个回调函数。操作完成后,事件循环会触发回调,实现高效处理。例如:
    • 用户请求到达服务器 → 注册回调 → 处理其他任务 → 请求完成时自动执行回调。
  • 非阻塞 I/OI/O 操作(如数据库查询或文件读写)在后台异步执行,主线程继续处理新任务
  • 这避免了传统同步模型的等待时间,提升了吞吐量。
  • 数学上,这类似于优化资源利用率:如果每个请求耗时 t t t,并发请求数为 n n n,则非阻塞模型能将处理时间降低到接近 O ( 1 ) O(1) O(1)(理想情况下),而阻塞模型可能达到 O ( n ) O(n) O(n)。

这些特性让 Node.js 在构建实时应用(如聊天服务或 API 服务器)时表现出色

应用场景

Node.js 让 JavaScript 成为全栈开发语言,适用于:

  • 后端服务:构建 RESTful API、微服务或实时应用(如 WebSockets)。
  • 工具链开发 :创建命令行工具或自动化脚本(如构建工具 Webpack)
  • 数据库交互:高效连接 MongoDB 或 MySQL。
1.1.2 Node.js 的运行环境:不止 "能跑",还很能 "干活"

Node.js 本质上是一个 "包装了 V8 引擎" 的程序,它让 JavaScript 拥有了操作操作系统的能力。

  • 核心组成

    • V8 引擎:负责解析和执行 JavaScript 代码(和 Chrome 浏览器用的是同一个引擎);

    • 内置 API:Node.js 自带的工具包(比如操作文件的 fs 模块、搭建服务器的 http 模块);

    • 跨平台支持:可以在 Windows、macOS、Linux 系统上运行,写一次代码到处跑。

  • 怎么 "运行"?

    不需要浏览器,直接在终端(命令行)里执行:

  1. 新建文件 demo.js,写入代码:

    javascript 复制代码
    console.log("我在 Node.js 里运行啦!");
  2. 打开终端,进入文件所在目录,输入命令:

    bash 复制代码
    node demo.js
1.1.3 Node.js vs 浏览器 JavaScript:同一个演员,不同的 "剧本"

虽然都用 JavaScript 语法,但两者的 "能力范围" 和 "工作场景" 完全不同。

对比项 浏览器 JavaScript Node.js
运行环境 依赖浏览器(Chrome、Firefox 等) 独立运行,依赖 Node.js 程序
核心功能 处理页面交互(DOM 操作、事件响应) 处理服务器逻辑(文件操作、数据库交互)
内置对象 windowdocument(操作页面) globalprocess(操作系统)
不能做的事 不能直接读写电脑文件(安全限制) 不能操作 DOM(没有页面可操作)

用代码直观感受区别:

  1. 浏览器里能做,Node.js 里不能做的事(操作 DOM):

    在浏览器控制台输入:

    javascript 复制代码
    document.write("Hello 浏览器!"); // 页面会显示文字

但在 Node.js 里运行同样的代码,会报错:ReferenceError: document is not defined

(原因:Node.js 没有 document 对象,因为它不需要操作页面)

  1. Node.js 里能做,浏览器里不能做的事(操作文件):

    在 Node.js 里新建 readFile.js

    javascript 复制代码
    // 引入 Node.js 内置的文件系统模块
    const fs = require('fs');
    const path = require('path');
    
    // 定义要读取的文件路径
    const filePath = path.join(__dirname, 'example.txt');
    
    // 异步读取文件
    fs.readFile(filePath, 'utf8', (err, data) => {
      if (err) {
        // 处理错误情况
        console.error('读取文件时发生错误:', err);
        return;
      }
    
      // 读取成功,输出文件内容
      console.log('文件内容如下:');
      console.log(data);
    });
    
    // 同步读取文件的方式
    try {
      const data = fs.readFileSync(filePath, 'utf8');
      console.log('\n同步读取的文件内容:');
      console.log(data);
    } catch (err) {
      console.error('同步读取文件时发生错误:', err);
    }

运行后能成功读取文件,但如果在浏览器里写同样的代码,会报错:

(原因:浏览器出于安全限制,禁止 JavaScript 直接操作本地文件)

1.1.4 什么时候用哪个?
1. 什么时候用浏览器 JavaScript?
  • 适用场景:当您需要处理用户界面交互时,如按钮点击事件、表单验证、动态内容更新等。这些操作直接在浏览器中运行,依赖于浏览器提供的 DOM API。

  • 为什么选它:浏览器环境内置了 DOM 和事件处理机制,能直接响应用户操作。

  • 简单代码示例

    javascript 复制代码
    // 示例:按钮点击事件处理
    document.getElementById('myButton').addEventListener('click', function() {
      alert('按钮被点击了!');
    });
2. 什么时候用 Node.js?
  • 适用场景当您需要处理后台逻辑时,如搭建服务器、运行命令行工具、自动备份脚本等。这些操作在服务器端执行,不依赖浏览器

  • 为什么选它 :Node.js 提供了 文件系统、网络模块等 API,适合处理 I/O 密集型任务

  • 简单代码示例

    javascript 复制代码
    // 示例:创建一个简单的 HTTP 服务器
    const http = require('http');
    http.createServer((req, res) => {
      res.end('Hello from Node.js!');
    }).listen(3000);
3. 核心原则:JavaScript 语法的通用性
  • 就像您比喻的厨师,JavaScript 的语法(如变量声明、函数定义)在浏览器和 Node.js 中完全一致。例如,声明一个函数在任何地方都相同:

    javascript 复制代码
    function greet(name) {
      return `你好, ${name}!`;
    }
  • 关键区别工具库和环境 API 不同 。浏览器提供 document 对象,Node.js 提供 fshttp 模块。但核心语言不变,学习一次就能多场景应用。

相关推荐
来来走走1 小时前
Flutter开发 了解Scaffold
android·开发语言·flutter
xiangweiqiang2 小时前
用phpstudy安装php8.2后报错:意思是找不到php_redis.dll拓展时
开发语言·php
mitt_2 小时前
go语言变量
开发语言·后端·golang
TravisBytes3 小时前
gRPC C++ 从 0 到 1 → 到线上:**超详细** 环境搭建、编码范式、性能调优与 DevOps 全攻略
开发语言·c++·devops
得物技术3 小时前
Java SPI 机制初探|得物技术
javascript
一个很帅的帅哥3 小时前
Node.js和Javascript中的async和await
javascript·node.js·async·promise·await
liliangcsdn3 小时前
`npm error code CERT_HAS_EXPIRED‘ 问题
前端·npm·node.js
生活不易,被迫卖艺3 小时前
Redux与React-环境准备(React快速上手1)
前端·javascript·react.js
这是个栗子4 小时前
npm报错:npm install 出现“npm WARN old lockfile”
前端·npm·node.js·编辑器