Appearance
NodeJs文档
快速导航
什么是Node.js?
Node.js是一个基于Chrome V8引擎的JavaScript运行时环境。它让开发者可以使用JavaScript来编写服务器端程序。Node.js采用事件驱动、非阻塞I/O模型,使其轻量且高效,特别适合构建数据密集型的实时应用程序。
Node.js的起源
Node.js由Ryan Dahl于2009年创建。他的目标是创建实时推送网站的实时应用程序。在观察到当时流行的Apache HTTP服务器处理大量并发连接的局限性后,他决定创建一个轻量级的、事件驱动的平台。Node.js的第一个版本发布后迅速获得了开发者社区的关注和支持。
Node.js的特点
事件驱动
Node.js使用事件循环机制处理并发,这使得它能够高效地处理大量并发连接:
- 基于回调的事件处理
- 异步编程模型
- 高效的事件循环
非阻塞I/O
采用非阻塞I/O模型,提高应用程序性能:
- 异步文件操作
- 并行请求处理
- 高并发支持
跨平台
支持多个操作系统平台:
- Windows
- macOS
- Linux
- Unix
包管理系统
强大的npm生态系统:
- 庞大的模块库
- 便捷的依赖管理
- 版本控制
- 脚本运行
Node.js的应用场景
Node.js特别适合以下场景:
- Web应用开发
- 实时通讯系统
- 命令行工具
- 微服务架构
- API服务
- 流数据处理
安装Node.js
安装步骤
下载安装包 从官网下载对应系统的安装包:https://nodejs.org/
Windows安装
bash
# 下载并运行.msi安装包
# 验证安装
node --version
npm --version
- Linux安装
bash
# 使用包管理器
sudo apt update
sudo apt install nodejs npm # Ubuntu/Debian
sudo dnf install nodejs npm # Fedora
- macOS安装
bash
# 使用Homebrew
brew install node
安装注意事项
版本选择
- LTS版本:稳定性好,建议生产环境使用
- Current版本:最新特性,可能不稳定
环境变量
- 确保Node.js已添加到系统PATH
- 验证环境变量设置
权限设置
- Linux/macOS可能需要sudo权限
- Windows可能需要管理员权限
npm配置
- 设置npm源
- 配置全局安装路径
Node.js的基本操作
基本概念
模块系统
javascript
// 导入模块
const fs = require('fs');
const path = require('path');
// 导出模块
module.exports = {
functionName: function() {
// 函数实现
}
};
包管理
package.json基本结构:
json
{
"name": "project-name",
"version": "1.0.0",
"description": "项目描述",
"main": "index.js",
"scripts": {
"start": "node index.js",
"test": "jest"
},
"dependencies": {
"express": "^4.17.1"
},
"devDependencies": {
"nodemon": "^2.0.7"
}
}
异步编程
Promise示例:
javascript
const fs = require('fs').promises;
async function readFile() {
try {
const data = await fs.readFile('file.txt', 'utf8');
console.log(data);
} catch (error) {
console.error('Error:', error);
}
}
常用操作
文件操作
javascript
const fs = require('fs');
// 读取文件
fs.readFile('file.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
// 写入文件
fs.writeFile('file.txt', 'Hello World!', (err) => {
if (err) throw err;
console.log('File written');
});
HTTP服务器
javascript
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
});
server.listen(3000, () => {
console.log('Server running at http://localhost:3000/');
});
事件处理
javascript
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.on('event', () => {
console.log('事件触发');
});
myEmitter.emit('event');
调试技巧
使用调试器
bash
# 启动调试模式
node --inspect app.js
# 断点调试
debugger;
性能分析
- 使用内置分析器
bash
node --prof app.js
- 使用Chrome DevTools
- 使用第三方工具(如clinic.js)
最佳实践
错误处理
javascript
// 异步错误处理
process.on('uncaughtException', (err) => {
console.error('未捕获的异常:', err);
process.exit(1);
});
// Promise错误处理
process.on('unhandledRejection', (reason, promise) => {
console.error('未处理的Promise拒绝:', reason);
});
安全建议
依赖管理
- 定期更新依赖
- 使用npm audit检查安全问题
- 锁定依赖版本
代码安全
- 输入验证
- 参数消毒
- 使用安全的依赖
环境配置
- 使用环境变量
- 区分开发和生产环境
- 安全的配置管理
性能优化
代码优化
- 异步操作
- 缓存使用
- 内存管理
运行优化
- 负载均衡
- 集群使用
- 监控系统
部署优化
- Docker容器化
- CI/CD流程
- 自动化测试