内容大纲
- 1. Node.js简介
- 2. Node.js安装
- 3. Node.js基本概念
- 4. Node.js模块系统
- 5. 文件系统操作
- 6. HTTP服务器创建
- 7. npm包管理
- 8. Node.js最佳实践
1. Node.js简介
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,允许开发者使用JavaScript编写服务器端代码。Node.js采用事件驱动、非阻塞I/O模型,使其轻量且高效,非常适合构建可扩展的网络应用。
Node.js的主要特点包括:
- 使用JavaScript语言,前后端开发语言统一
- 事件驱动,非阻塞I/O,高并发处理能力
- 丰富的npm包生态系统
- 跨平台,可在Windows、Linux、macOS等系统上运行
- 轻量高效,适合构建微服务和API
更多学习教程www.fgedu.net.cn
2. Node.js安装
2.1 Linux系统安装Node.js
#
# 使用NodeSource安装最新版本
#
curl -fsSL https://deb.nodesource.com/setup_lts.x | bash –
#
apt install -y nodejs
#
# 检查Node.js和npm版本
#
node -v
$
v18.16.0
#
npm -v
$
9.5.1
2.2 Windows系统安装Node.js
1. 访问Node.js官方网站:https://nodejs.org/zh-cn/
2. 下载适合您系统的LTS版本安装包
3. 运行安装程序,按照向导完成安装
4. 安装完成后,打开命令提示符验证安装
C:\>
node -v
C:\>
v18.16.0
C:\>
npm -v
C:\>
9.5.1
2.3 macOS系统安装Node.js
$
# 使用Homebrew安装Node.js
$
brew install node
$
# 检查Node.js和npm版本
$
node -v
$
v18.16.0
$
npm -v
$
9.5.1
3. Node.js基本概念
3.1 全局对象
// console对象
console.log("Hello, Node.js!");
// process对象
console.log(process.version);
// 输出Node.js版本
console.log(process.platform);
// 输出操作系统平台
console.log(process.argv);
// 输出命令行参数
// __dirname和__filename
console.log(__dirname);
// 输出当前文件所在目录
console.log(__filename);
// 输出当前文件的完整路径
3.2 事件循环
Node.js采用事件驱动模型,通过事件循环处理异步操作。事件循环的主要阶段包括:
- 定时器阶段:处理setTimeout和setInterval回调
- I/O回调阶段:处理I/O操作的回调
- 闲置阶段:执行闲置回调
- 轮询阶段:执行I/O操作
- 检查阶段:处理setImmediate回调
- 关闭回调阶段:处理关闭事件的回调
3.3 异步编程
// 回调函数
const fs = require('fs');
fs.readFile('file.txt', 'utf8', (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
});
// Promise
const readFilePromise = (filePath) => {
return new Promise((resolve, reject) => {
fs.readFile(filePath, 'utf8', (err, data) => {
if (err) {
reject(err);
return;
}
resolve(data);
});
});
};
readFilePromise('file.txt')
.then(data => console.log(data))
.catch(err => console.error(err));
// async/await (ES2017+)
async function readFileAsync() {
try {
const data = await readFilePromise('file.txt');
console.log(data);
} catch (err) {
console.error(err);
}
}
readFileAsync();
4. Node.js模块系统
4.1 模块类型
- 核心模块:Node.js内置的模块,如fs、path、http等
- 文件模块:用户创建的模块,通过相对路径或绝对路径引入
- 第三方模块:通过npm安装的模块
4.2 模块导出与引入
// 模块导出(module1.js)
// 方式1:导出单个值
module.exports = function add(a, b) {
return a + b;
};
// 方式2:导出多个值
module.exports = {
add: function(a, b) {
return a + b;
},
multiply: function(a, b) {
return a * b;
}
};
// 方式3:使用exports
exports.add = function(a, b) {
return a + b;
};
exports.multiply = function(a, b) {
return a * b;
};
// 模块引入
const module1 = require('./module1');
console.log(module1.add(1, 2));
// 3
console.log(module1.multiply(2, 3));
// 6
4.3 核心模块示例
// path模块
const path = require('path');
console.log(path.join(__dirname, 'file.txt'));
// 输出完整路径
console.log(path.basename('/path/to/file.txt'));
// 输出文件名
console.log(path.extname('/path/to/file.txt'));
// 输出文件扩展名
// os模块
const os = require('os');
console.log(os.platform());
// 输出操作系统平台
console.log(os.totalmem());
// 输出总内存
console.log(os.freemem());
// 输出可用内存
// util模块
const util = require('util');
const readFile = util.promisify(fs.readFile);
readFile('file.txt', 'utf8')
.then(data => console.log(data))
.catch(err => console.error(err));
5. 文件系统操作
5.1 同步操作
const fs = require('fs');
// 读取文件
const data = fs.readFileSync('file.txt', 'utf8');
console.log(data);
// 写入文件
fs.writeFileSync('output.txt', 'Hello, Node.js!');
// 追加文件
fs.appendFileSync('output.txt', '\nAppend content');
// 删除文件
fs.unlinkSync('output.txt');
// 创建目录
fs.mkdirSync('newdir');
// 读取目录
const files = fs.readdirSync('newdir');
console.log(files);
// 删除目录
fs.rmdirSync('newdir');
5.2 异步操作
const fs = require('fs');
// 读取文件
fs.readFile('file.txt', 'utf8', (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
});
// 写入文件
fs.writeFile('output.txt', 'Hello, Node.js!', (err) => {
if (err) {
console.error(err);
return;
}
console.log('File written successfully');
});
// 追加文件
fs.appendFile('output.txt', '\nAppend content', (err) => {
if (err) {
console.error(err);
return;
}
console.log('Content appended successfully');
});
// 删除文件
fs.unlink('output.txt', (err) => {
if (err) {
console.error(err);
return;
}
console.log('File deleted successfully');
});
// 创建目录
fs.mkdir('newdir', (err) => {
if (err) {
console.error(err);
return;
}
console.log('Directory created successfully');
});
// 读取目录
fs.readdir('newdir', (err, files) => {
if (err) {
console.error(err);
return;
}
console.log(files);
});
// 删除目录
fs.rmdir('newdir', (err) => {
if (err) {
console.error(err);
return;
}
console.log('Directory deleted successfully');
});
6. HTTP服务器创建
6.1 基本HTTP服务器
const http = require('http');
const server = http.createServer((req, res) => {
// 设置响应头
res.writeHead(200, {'Content-Type': 'text/plain'});
// 发送响应内容
res.end('Hello, World!\n');
});
// 监听端口
const port = 3000;
server.listen(port, () => {
console.log(`Server running at http://fgedudb:${port}/`);
});
6.2 处理不同路由
const http = require('http');
const url = require('url');
const server = http.createServer((req, res) => {
const parsedUrl = url.parse(req.url, true);
const path = parsedUrl.pathname;
res.writeHead(200, {'Content-Type': 'text/plain'});
switch (path) {
case '/':
res.end('Home Page\n');
break;
case '/about':
res.end('About Page\n');
break;
case '/contact':
res.end('Contact Page\n');
break;
default:
res.writeHead(404);
res.end('404 Not Found\n');
}
});
const port = 3000;
server.listen(port, () => {
console.log(`Server running at http://fgedudb:${port}/`);
});
6.3 处理POST请求
const http = require('http');
const server = http.createServer((req, res) => {
if (req.method === 'POST') {
let body = '';
// 接收请求体数据
req.on('data', chunk => {
body += chunk.toString();
});
// 请求体数据接收完成
req.on('end', () => {
console.log('Received data:', body);
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('POST request received\n');
});
} else {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('GET request received\n');
}
});
const port = 3000;
server.listen(port, () => {
console.log(`Server running at http://fgedudb:${port}/`);
});
7. npm包管理
7.1 npm基本命令
$
# 初始化项目
$
npm init
$
# 安装包
$
npm install package-name
$
# 安装开发依赖
$
npm install –save-dev package-name
$
# 全局安装
$
npm install -g package-name
$
# 卸载包
$
npm uninstall package-name
$
# 查看已安装的包
$
npm list
$
# 查看包信息
$
npm view package-name
$
# 更新包
$
npm update package-name
7.2 package.json配置
{
"name": "my-project",
"version": "1.0.0",
"description": "A Node.js project",
"main": "index.js",
"scripts": {
"start": "node index.js",
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "nodemon index.js"
},
"dependencies": {
"express": "^4.18.2"
},
"devDependencies": {
"nodemon": "^2.0.22"
},
"keywords": ["nodejs", "express"],
"author": "Your Name",
"license": "MIT"
}
7.3 使用第三方包示例
// 安装express
// npm install express
const express = require('express');
const app = express();
const port = 3000;
// 中间件
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// 路由
app.get('/', (req, res) => {
res.send('Hello, Express!');
});
app.get('/api/users', (req, res) => {
res.json([
{ id: 1, name: 'John' },
{ id: 2, name: 'Jane' }
]);
});
app.post('/api/users', (req, res) => {
const newUser = req.body;
res.status(201).json(newUser);
});
// 启动服务器
app.listen(port, () => {
console.log(`Server running at http://fgedudb:${port}/`);
});
8. Node.js最佳实践
生产环境建议
- 使用PM2等进程管理工具管理Node.js应用
- 设置NODE_ENV环境变量为production
- 使用集群模式提高性能和可靠性
- 合理使用缓存,减少I/O操作
- 使用环境变量管理配置
- 实施错误处理和日志记录
- 使用ESLint和Prettier保持代码质量
- 编写单元测试和集成测试
- 使用TypeScript提高代码可维护性
- 定期更新依赖包,修复安全漏洞
风哥风哥提示:Node.js生态系统非常丰富,建议根据项目需求选择合适的框架和库。
学习交流加群风哥微信: itpux-com
学习交流加群风哥QQ113257174
更多学习教程公众号风哥教程itpux_com
author:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
