1. Node.js简介
什么是Node.js
Node.js是一个开源的JavaScript运行时环境,基于Chrome的V8引擎构建。它允许开发者在服务器端运行JavaScript,并且提供了丰富的库和模块,使得构建网络应用变得更加高效。
Node.js的特点
- 非阻塞I/O:Node.js采用事件驱动、非阻塞I/O模型,提高了系统的并发处理能力。
- 单线程:Node.js使用单线程模型,通过事件循环来处理多个连接,适用于高并发的场景。
- 跨平台:Node.js支持多种操作系统,包括Windows、Linux和Mac OS。
2. 环境搭建
安装Node.js
访问Node.js官网下载适合你操作系统的版本,按照安装向导进行安装。
Node.js版本管理工具(nvm)
使用nvm可以方便地管理Node.js的多个版本。
安装特定版本的 Node.js:
nvm install <version>
安装最新的 LTS 版本:
nvm install lts
切换到已经安装的 Node.js 版本:
nvm use <version>
第一个Node.js程序
创建一个app.js
文件,内容如下:
console.log("Hello, Node.js!");
在终端中运行:
node app.js
3. Node.js核心模块
node.js 内置了许多强大的模块,常用的包括:
- http:创建 HTTP 服务器。
- fs:文件系统操作。
- path:文件路径操作。
- url:URL 解析。
- express:Web 框架(下一篇会详细介绍)。
事件模块
Node.js的事件模块提供了一种异步事件驱动的编程方式。
const EventEmitter = require('events');
const emitter = new EventEmitter();
emitter.on('event', () => {
console.log('事件触发!');
});
emitter.emit('event');
文件系统模块
文件系统模块提供了对文件和目录的操作功能。
const fs = require('fs');
// 读取文件
fs.readFile('example.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
// 写入文件
fs.writeFile('example.txt', 'Hello, World!', (err) => {
if (err) throw err;
console.log('文件已保存!');
});
HTTP模块
HTTP模块可以创建服务器并处理请求。
const http = require('http');
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello, World!\n');
});
server.listen(3000, () => {
console.log('服务器运行在 http://localhost:3000/');
});
路径模块
路径模块提供文件路径的处理方法。
const path = require('path');
const filePath = path.join(__dirname, 'example.txt');
console.log(filePath);
OS模块
OS模块提供有关操作系统的信息。
const os = require('os');
console.log('操作系统类型:', os.type());
console.log('系统内存:', os.totalmem());
4. NPM与模块管理
NPM简介
NPM是Node.js的包管理工具,提供了模块的安装、更新和卸载功能。
模块的安装与使用
安装第三方模块:
npm install express
使用模块:
const express = require('express');
创建自定义模块
创建一个模块文件myModule.js
:
module.exports.sayHello = function() {
console.log('Hello from myModule!');
};
在主文件中使用:
const myModule = require('./myModule');
myModule.sayHello();
package.json详解
package.json
是项目的配置文件,记录项目的基本信息及依赖。
{
"name": "my-project",
"version": "1.0.0",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "^4.17.1"
}
}
5. 异步编程
回调函数
Node.js使用回调函数处理异步操作。
fs.readFile('example.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
Promise
Promise是解决回调地狱的一种方式。
const fs = require('fs').promises;
fs.readFile('example.txt', 'utf8')
.then(data => console.log(data))
.catch(err => console.error(err));
async/await
async/await更进一步,简化了异步代码的写法。
async function readFileAsync() {
try {
const data = await fs.readFile('example.txt', 'utf8');
console.log(data);
} catch (err) {
console.error(err);
}
}
readFileAsync();