Nodejs学习笔记(二)
## 🛒 理解服务器与 HTTP 的本质
**服务器就像一个小卖铺**:你给它“钱”(请求报文),它就给你“零食”(响应报文)。
而这个交易遵循的规则,就叫做 **HTTP 协议**。你可以理解它为“网络世界的消费者权益保护法”:规定了用户请求、商家响应的格式与流程。
---
## 📦 一、HTTP 报文结构解析
### 🔹 请求报文(Request)——你向小卖铺提出请求
- **请求行**:去哪买
例如:`GET /index.html HTTP/1.1`
包含:请求方法(GET、POST 等)、路径(URL)、协议版本
- **请求头**:买家信息
包含如:
- `Host`:主机地址
- `Cache-Control`:缓存控制
- `Connection`:是否保持连接等
- **请求体**:特别说明(通常 POST 请求时才有)
如表单提交的数据
### 🔹 响应报文(Response)——小卖铺的回应
- **响应行**:能不能买、有没有货
例如:`HTTP/1.1 200 OK`
- **响应头**:小卖铺的说明
如:
- `Content-Type`: 响应的格式,如 `text/html`
- **响应体**:具体商品
如 HTML 页面、图片、JSON 数据等
---
## 🛠 二、使用原生 `http` 模块创建服务器
### 1️⃣ 基本流程
```js
const http = require(‘http’)
const server = http.createServer((req, res) => {
// 请求处理逻辑
})
server.listen(3000, () => {
console.log(‘服务器已启动,端口 3000’)
})
2️⃣ 如何获取请求报文
req.method // 请求方式
req.url // 请求路径
require(‘url’).parse(req.url) // 解析 url 路径和参数
req.headers // 请求头
req.on(‘data’, chunk => {}) // 请求体
req.on(‘end’, () => {}) // 请求结束
3️⃣ 如何设置响应报文
res.statusCode = 200
res.statusMessage = ‘OK’
res.setHeader(‘Content-Type’, ‘text/html’)
res.write(‘
Hello
’)res.end()
📦 三、NPM:Node 包管理工具
为了避免重复造轮子,Node 有了模块化和包管理工具 —— npm。
常用命令:
操作
命令
初始化. npm init 或 npm init -y
安装模块. npm i 模块名
安装开发依赖. npm i -D 模块名
安装生产依赖. npm i -S 模块名
全局安装. npm i -g 模块名
卸载模块 npm r 模块名
指定版本安装 npm i 模块名@版本号
查看本地模块 npm list
其他工具
- cnpm:淘宝镜像(国内加速)
- nrm:切换源(nrm use taobao)
- yarn:Facebook 开发的另一个包管理器
🚀 四、使用 Express 快速构建服务器
Express 是对原生 HTTP 的封装,大幅提升开发效率。
1️⃣ 快速启动一个服务
const express = require(‘express’)
const app = express()
app.get(‘/home’, (req, res) => {
res.setHeader(‘Content-Type’, ‘text/html;charset=utf-8’)
res.send(‘
首页
’)})
app.listen(3000, () => {
console.log(‘服务已启动:3000端口’)
})
📨 五、请求与响应简写(Express 特有)
获取请求内容:
- req.query:获取 GET 参数
- req.body:获取 POST 数据(需配合中间件)
- req.get(‘Host’):获取请求头中的 Host 字段
设置响应内容:
- res.status(code).set({…}).send()
- res.sendFile(path)
- res.download(path)
- res.redirect(url)
- res.json(obj)
🧩 六、中间件:Express 的核心机制
中间件是函数 (req, res, next),可以进行权限校验、数据处理、日志记录等。
✅ 常见类型:
- 全局中间件:
app.use((req, res, next) => {
console.log(‘中间件执行’)
next()
})
- 路由中间件:
app.get(‘/home’, authMiddleware, (req, res) => {})
- 静态资源中间件:
app.use(express.static(‘public’))
🔄 七、Router 路由模块化
将不同路由拆分到独立模块中,降低耦合:
const userRouter = require(’./routes/user’)
app.use(‘/user’, userRouter)
在 routes/user.js 中:
const express = require(‘express’)
const router = express.Router()
router.get(‘/info’, (req, res) => {
res.send(‘用户信息’)
})
module.exports = router
✅ 总结回顾
- HTTP 报文结构理解是后端开发的第一步
- 原生 http 模块适合学习底层机制
- Express 提供更高效的服务构建方式
- NPM 是 Node 世界的轮子工厂
- 中间件机制是 Express 的核心灵魂
🌱 每天进步一点点,今天你已经比昨天更强了!
---
需要我帮你把这份笔记直接格式化导出为 `.md` 文件吗?或者上传到你的 GitHub 学习仓库?只要你说一声。
AI总结
- HTTP 协议 likened to a shop transaction, defining request and response structures for client-server communication.
- Node.js’s
httpmodule allows creating basic servers, handling requests and responses with methods likereqandres. - Express simplifies server creation with built-in methods for routing, middleware, and response handling.
- NPM manages packages efficiently, offering commands for installing, uninstalling, and maintaining dependencies.
- Middleware in Express enhances functionality by enabling tasks like authentication, logging, and serving static files.