Node.js 开发指南,命令手册,常用概念
Node.js 开发指南
1. Node.js 概述
Node.js 是一个用于在浏览器之外执行 JavaScript 代码的运行环境。它基于 Google Chrome 的 V8 JavaScript 引擎,这使得开发者可以使用 JavaScript 进行服务端脚本编写,从而开发动态的 Web 应用程序。Node.js 以其非阻塞、事件驱动的架构而著称,这使其在处理 I/O 密集型应用时非常高效。
2. Node.js 安装与基础操作
-
查看版本:
-
node -v
:查看 Node.js 版本号。 -
npm -v
:查看 npm(Node.js 包管理器)版本号。
-
-
安装依赖包:
-
npm install 包名@版本
:安装指定版本的包。 -
npm install 包名 --save-dev
:将包安装到devDependencies
中,用于开发环境。 -
npm install 包名 -g
:全局安装包(如nodemon
、nrm
等)。
-
-
初始化项目:
-
npm init -y
:快速创建package.json
文件,初始化项目。 -
npm install
:根据package.json
文件安装项目依赖。
-
-
其他常用命令:
-
clear
:清屏。 -
ls
:查看当前目录下的文件和文件夹。
-
3. 全局对象与工具
-
全局对象:
-
global
:Node.js 提供的全局对象,例如global.console.log("hello node")
可以在任何地方使用。
-
-
工具:
-
express
:一个基于 Node.js 的 Web 框架,用于构建 HTTP 服务。 -
nodemon
:用于监控文件变化,并自动重启 Node.js 应用程序的工具。
-
-
镜像配置:
-
npm config get registry
:查看当前的 npm 镜像源。 -
npm config set registry <url>
:设置镜像源(如淘宝源https://registry.npm.taobao.org
)。 -
nrm
:npm 镜像源管理工具,可以方便地切换不同的镜像源。
-
-
Node.js 版本管理:
-
npm install n -g
:安装n
版本管理工具。 -
n <version>
:切换或安装指定的 Node.js 版本。
-
-
缓存管理:
-
npm cache clean -f
:清理 npm 缓存。
-
4. Node.js 内置模块
-
文件系统(fs):
-
fs.readFile(path, callback)
:异步读取文件内容。 -
fs.writeFile(file, data, callback)
:异步写入内容到文件。
-
-
路径模块(path):
-
path.join([...paths])
:将多个路径片段拼接成一个完整的路径字符串。
-
5. 模块系统
Node.js 使用 CommonJS 模块系统,每个文件都是一个模块。模块的成员可以通过 exports
对象导出,其他模块通过 require
函数进行导入。
-
加载模块:
const fs = require('fs'); // 加载内置模块 const custom = require('./customModule'); // 加载自定义模块 const moment = require('moment'); // 加载第三方模块,需先安装
-
导出与导入:
// 导出模块成员 module.exports = { sayHello: function() { console.log("Hello"); } }; // 导入模块成员 const { sayHello } = require('./customModule'); sayHello();
-
包的语义化版本规范:
- 版本号格式为
主版本号.次版本号.修订号
,例如3.3.3
。- 主版本号:有重大变更时增加。
- 次版本号:新增功能时增加。
- 修订号:修复 Bug 时增加。
- 版本号格式为
-
共享项目时删除
node_modules
文件夹:
通过package.json
中的dependencies
字段记录项目依赖,其他开发者可以通过npm install
重新安装依赖。
6. Express 框架概述
Express
是一个基于 Node.js 的 Web 应用框架,它简化了服务器端开发,提供了丰富的功能用于处理 HTTP 请求和响应。
-
Express 项目初始化:
npm install express
-
快速入门示例:
// 导入 express const express = require('express'); // 创建应用对象 const app = express(); // 创建路由规则 app.get('/home', (req, res) => { res.send('hello express server'); }); // 监听端口 启动服务 app.listen(3000, () => { console.log('服务已启动,端口监听为 3000'); });
7. Express 路由
路由决定了应用程序如何响应客户端对特定端点的请求。一个路由由请求方法、路径和回调函数组成。
-
示例:
app.get('/home', (req, res) => { res.send('网站首页'); }); app.post('/login', (req, res) => { res.send('登录成功'); }); app.all('*', (req, res) => { res.send('<h1>404 Not Found</h1>'); });
8. 获取请求参数
Express 提供了简便的 API 来获取请求报文中的数据,同时兼容原生 HTTP 模块的获取方式。
-
示例:
app.get('/request', (req, res) => { console.log(req.query); // 获取查询字符串 console.log(req.get('host')); // 获取指定的请求头 res.send('请求报文的获取'); });
9. 响应客户端请求
Express 提供了简便的 API 来设置响应状态码、响应头和响应体,同时兼容原生 HTTP 模块。
-
示例:
app.get('/response', (req, res) => { res.status(500); // 设置响应状态码 res.set('session', 'abcdefghijklmn'); // 设置响应头 res.send('中文响应不乱码'); // 设置响应体 });
案例
1. 使用 Express 构建一个简单的 Web 应用
const express = require('express');
const app = express();
// 主页路由
app.get('/', (req, res) => {
res.send('欢迎来到我的网站');
});
// 登录路由
app.post('/login', (req, res) => {
res.send('登录成功');
});
// 404 路由
app.all('*', (req, res) => {
res.send('<h1>404 Not Found</h1>');
});
// 启动服务器
app.listen(3000, () => {
console.log('服务器已启动,端口监听在 3000');
});
2. 使用 fs 模块读取和写入文件
const fs = require('fs');
// 读取文件内容
fs.readFile('example.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
// 写入内容到文件
fs.writeFile('example.txt', 'Hello, Node.js!', (err) => {
if (err) throw err;
console.log('文件已保存');
});
通过这个开发指南和案例,你可以更好地掌握 Node.js 和 Express 的基本用法,并能够在实际项目中灵活应用这些知识。