likes
comments
collection
share

一篇文章 从入门 到 我是Node.js 高手 😎

作者站长头像
站长
· 阅读数 20

Node.js是一个基于Chrome V8 JavaScript引擎的开源、跨平台运行时环境,它允许开发者使用JavaScript编写服务器端代码。自从2009年发布以来,Node.js因其非阻塞、事件驱动的架构在开发高性能网络应用中变得非常受欢迎。 它不仅可以在浏览器中运行JavaScript,还可以在服务器端运行,使得JavaScript不仅仅局限于前端开发,还可以与后端关联,扩大了js的使用范围。Node.js也是后端技术,主要用于与服务器通信和与操作系统交互。

Node.js的基本概念

Node.js是什么

  1. JavaScript运行环境:Node.js基于Chrome V8引擎,能够在服务器端执行JavaScript代码。
  2. 后端技术:Node.js用于开发服务器端应用,与服务器和操作系统进行交互。
  3. JavaScript执行器:Node.js提供了许多可以与操作系统交互的模块,并支持JavaScript进行调用。

为什么选择Node.js?

  • 单一编程语言:前端和后端都使用JavaScript,使得全栈开发更加简单。

  • 高性能:基于V8引擎,执行速度快。

  • 事件驱动:非阻塞I/O模型,非常适合处理高并发。

  • 丰富的包生态系统:通过npm,可以轻松找到和使用大量现成的模块和包。

安装 nvm 以及 Node.js 安装

作为一名前端开发者,不建议就直接先去安装一个 Node.js ,对后期 Node 版本管理,以及多版本 Node 的切换使用会十分麻烦。在这里优先推荐去安装一个 nvm 。 Node Version Manager (nvm) 是一个用于管理多个Node.js版本的工具。使用nvm,可以轻松地在不同版本的Node.js之间切换。

注:如果在安装nvm前已经安装了node,建议先将原来的node进行卸载或删除

下载并安装nvm,下载地址:github.com/coreybutler…,下载.zip后缀的这个文件,下载后解压安装即可

一篇文章  从入门 到 我是Node.js 高手 😎

然后查看安装的版本号,检查安装是否成功,在命令行直接敲:nvm

一篇文章  从入门 到 我是Node.js 高手 😎

接着使用nvm安装多版本Node.js

首先查看所有可安装的版本

nvm list available

一篇文章  从入门 到 我是Node.js 高手 😎 然后选择你要安装的版本(建议安装稳定版本 LTS 那一列)

nvm install 20.16.0

使用指定版本或切换到指定版本

nvm use 20.16.0

查看当前版本信息

node -v (查看当前版本)
nvm list (查看已安装的所有nodejs版本)

一篇文章  从入门 到 我是Node.js 高手 😎

有*的是当前使用的版本。

到现在 nvmNode.js 便已经安装好了。

Node.js 项目启动

首先,在控制台打印一个最基础的 hello world index.js

const str = 'hello world'
console.log(str)

然后在控制台输入

node index.js

一篇文章  从入门 到 我是Node.js 高手 😎

原本js文件要在浏览器才能运行,但是有了node后,js也能去调用系统以及服务器端去实现一些后端的功能!

Node.js 重要的全局对象

本文我们仅介绍几种常见的全局对象,如果想要深入学习可以参考首页 | Node.js v20 文档 (nodejs.cn)

Process

process是Node.js中的一个全局对象,它提供了有关当前Node.js进程的信息和控制。

process对象包含多个属性和方法,用于访问和控制Node.js进程的运行状态。可以获取进程的ID、环境变量、当前工作目录等。

Process的应用场景

  • 获取进程信息,如进程ID和内存使用情况。
  • 处理命令行参数。
  • 控制进程退出和处理退出事件。
// 打印进程ID和Node.js版本
console.log(`Process ID: ${process.pid}`);
console.log(`Node.js version: ${process.version}`);

// 获取并打印环境变量
console.log(`Environment Variables: ${JSON.stringify(process.env)}`);

// 捕获并处理未捕获的异常
process.on('uncaughtException', (err) => {
  console.error('There was an uncaught error', err);
  process.exit(1); // 非零退出码表示失败
});

一篇文章  从入门 到 我是Node.js 高手 😎 这便都打印出来了!

Global对象

global是Node.js中的一个全局对象,可以在任何地方访问。它相当于浏览器中的window对象。

global对象包含了许多全局变量,如processBuffersetTimeout等。可以在任何地方访问这些变量和函数,而不需要require它们。可以说是最大的全局对象了。

Global的应用场景

  • 定义全局变量和函数。
  • 访问Node.js提供的全局API。

通过下面的示例

// 定义一个全局变量
global.myVariable = 'Hello, Global!';
console.log(global.myVariable); // 输出: Hello, Global!

// 访问全局函数
global.setTimeout(() => {
  console.log('This message is displayed after 1 second');
}, 1000);

一篇文章  从入门 到 我是Node.js 高手 😎

require和module对象

require函数用于引入模块,而module对象表示当前模块。每个模块都有一个独立的module对象。

require用于引入其他模块,并返回模块的导出对象。而 module对象用于定义当前模块的导出内容。也就是说,module 抛出的就是由 require 给引入,和 Vue 使用的 ES6 语法的 importexport 差不多。

我们用两个文件来作为示例 math.js

function add(a, b) { 
    return a + b; 
    } 
module.exports = { add };

index.js

const math = require('./math');
console.log(math.add(2, 3));

一篇文章  从入门 到 我是Node.js 高手 😎 可以看到成功引入了在 math.js 文件定义的函数。可以说 requiremodule 是Node生态最重要的一部分,下文还将详细说明。

Node.js 模块化

模块化是指将一个大的程序拆分成多个小的模块,每个模块都是独立的,并且可以被其他模块引用。Node.js中主要有两种模块化语法:CommonJS和ES6模块。

  • CommonJS:Node.js最初的模块系统,使用require导入和module.exports导出。 math.js
function add(a, b) {
    return a + b; 
            }
module.exports = { add };

index.js

const math = require('./math');
console.log(math.add(2, 3)); // 输出: 5
  • ES6模块:ECMAScript 2015标准引入的模块系统,使用importexport语法。这也是我们使用Vue经常会用到的但切记在使用Node的时候不要搞混了需要在package.json中设置"type": "module"。 math.js
export function add(a, b) {
  return a + b;
}

index.js

import { add } from './math.mjs';
console.log(add(2, 3)); // 输出: 5

使用模块化可以更好组织和管理代码、提高程序的可维护性和可扩展性、复用代码等。

Node.js 模块

模块是Node.js程序的基本组成部分。每个文件都是一个模块,具有自己的作用域。Node.js中有三种类型的模块:

  1. 核心模块:Node.js内置的模块,如fshttp
  2. 文件模块:用户创建的模块,通过相对路径或绝对路径引入。
  3. 第三方模块:通过npm安装的模块。

模块的使用

  • 核心模块:直接引入,无需安装。

  • 文件模块:通过相对路径或绝对路径引入。

  • 第三方模块:先通过npm安装,再通过模块名称引入。

核心模块

Node的核心模块有20多种,这里简单介绍一下fs 模块和 http 模块。

fs模块是Node.js内置的文件系统模块,fs模块允许我们读取、写入、删除和操作文件及目录。它提供了同步和异步两种API,分别用于阻塞和非阻塞操作。读取文件内容、写入文件、删除文件、操作目录。

http模块是Node.js内置的模块,用于创建HTTP服务器和客户端。它提供了HTTP服务器和客户端的基本功能,使我们能够处理HTTP请求和响应。

http模块通过创建服务器对象,可以监听特定的端口和处理HTTP请求。我们可以定义请求处理函数来处理客户端的请求,并返回相应的响应。

HTTP模块的应用场景:

  • 创建Web服务器。
  • 处理HTTP请求和响应。
  • 构建API服务。 以这个示例 index.js
const http = require('http'); // 引入http模块
const fs = require('fs); //引入fs模块
// 创建HTTP服务器
http.createServer((req, res) => {
    if (req.url === '/index') {
        const content  = fs.readFileSync('./index.html', { encoding: 'utf-8' }); // 读取文件内容
        console.log(content); // 输出文件内容到控制台
        res.end(content); // 发送响应数据
    } else {
        res.end('hello world'); // 默认响应
    }
}).listen(3000); // 服务器监听端口3000

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h2>你好世界</h2>
</body>
</html>

一篇文章  从入门 到 我是Node.js 高手 😎 我们便将后端的数据以响应方式输送到前端渲染。

第三方模块

我们可以去npm官网去查询大佬写的第三方模块。npm | Home (npmjs.com)

一篇文章  从入门 到 我是Node.js 高手 😎 直接去搜索需要引入的模块 这里我以 lodash 模块为例子介绍。

进入到模块的详情页面。

一篇文章  从入门 到 我是Node.js 高手 😎

这是如何用npm安装这个模块 一篇文章  从入门 到 我是Node.js 高手 😎 这部分是这个模块的git地址和官网

一篇文章  从入门 到 我是Node.js 高手 😎

通过阅读官方文档,我们可以得知Lodash是一个功能强大的JavaScript实用工具库,提供了一系列实用函数,用于数组、对象、字符串、数值等数据类型的处理。

我们先安装依赖

npm i lodash

index.js

const _ = require('lodash');

const array = [1, 2, 3, 4, 5];
const reversedArray = _.reverse(array.slice());
console.log(reversedArray); // 输出: [5, 4, 3, 2, 1]

一篇文章  从入门 到 我是Node.js 高手 😎

可以看到真的将数组反转了!

如果以后学有所成也可以将自己写的模块分享在 npm 社区。

总结

在本篇文章中,我们从如何配置Node.js环境、nvm安装、npm使用,到入门的Node.js的基本概念, 再到Node.js的应用场景原理,再进阶到最重要的模块化和模块,最后还聊了引入第三方模块的拓展。通过这些示例,我们不仅掌握了Node.js核心模块的使用,还了解了如何通过第三方模块进一步提升开发效率和代码质量。希望这篇文章能够帮助你更好地理解和应用Node.js,在实际项目中高效地进行全栈开发。如果文章对你有帮助,可以给点个赞哦😊!

转载自:https://juejin.cn/post/7397616334653685798
评论
请登录