wbccb / Frontend-Articles

博客文章+源码调试,已经完成vue2和vue3的源码解析+webpack5整体流程源码+vite4开发环境核心流程源码+koa2源码 ===>正在研究 React18源码
MIT License
9 stars 0 forks source link

【基础】Node.js使用详解 #11

Open wbccb opened 1 year ago

wbccb commented 1 year ago

Node.js简介

Node.js 是一个开源和跨平台的 JavaScript 运行时环境。它是几乎任何类型项目的流行工具!

Node.js 在浏览器之外运行 V8 JavaScript 引擎,它是 Google Chrome 的核心。这使得 Node.js 非常高效。

Node.js 应用程序在单个进程中运行,无需为每个请求创建新线程。 Node.js 在其标准库中提供了一组异步 I/O 原语,以防止 JavaScript 代码阻塞,并且通常,Node.js 中的库是使用非阻塞范例编写的,这使得阻塞行为成为例外而不是常态。

当 Node.js 执行 I/O 操作时,如从网络读取、访问数据库或文件系统,Node.js 不会阻塞线程和浪费 CPU 周期等待,而是会在响应返回时恢复操作。

这允许 Node.js 处理数千个与单个服务器的并发连接,而​​不会引入管理线程并发的负担,这可能是错误的重要来源。

Node.js 具有独特的优势,因为数百万为浏览器编写 JavaScript 的前端开发人员现在除了客户端代码之外,还能够编写服务器端代码,而无需学习完全不同的语言。

在 Node.js 中,可以毫无问题地使用新的 ECMAScript 标准,因为您不必等待所有用户更新他们的浏览器——您负责通过更改 Node.js 版本来决定使用哪个 ECMAScript 版本,您还可以通过运行带有标志的 Node.js 来启用特定的实验性功能。

Node是JavaScript语言的服务器运行环境。

所谓“运行环境”有两层意思:首先,JavaScript语言通过Node在服务器运行,在这个意义上,Node有点像JavaScript虚拟机;其次,Node提供大量工具库,使得JavaScript语言与操作系统互动(比如读写文件、新建子进程),在这个意义上,Node又是JavaScript的工具库。

Node内部采用Google公司的V8引擎,作为JavaScript语言解释器;通过自行开发的libuv库,调用操作系统资源。

简单示例

使用 node app.js 运行程序,访问 http://localhost:3000,你就会看到一个消息,写着Hello World

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

核心模块

CommonJS规范

Node模块采用CommonJS规范

// foo.js
module.exports = function(x) {
    console.log(x);
};

// index.js
var m = require('./foo');
m("这是自定义模块");

异常处理

Node是单线程运行环境,一旦抛出的异常没有被捕获,就会引起整个进程的崩溃。所以,Node的异常处理对于保证系统的稳定运行非常重要。

一般来说,Node有三种方法,传播一个错误。

参考

  1. https://nodejs.dev/en/learn/
  2. https://javascript.ruanyifeng.com/nodejs/basic.html