学习笔记

Nodejs学习笔记(二)

#Node.js #HTTP协议 #Express框架 #NPM #中间件

## 🛒 理解服务器与 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总结

  1. HTTP 协议 likened to a shop transaction, defining request and response structures for client-server communication.
  2. Node.js’s http module allows creating basic servers, handling requests and responses with methods like req and res.
  3. Express simplifies server creation with built-in methods for routing, middleware, and response handling.
  4. NPM manages packages efficiently, offering commands for installing, uninstalling, and maintaining dependencies.
  5. Middleware in Express enhances functionality by enabling tasks like authentication, logging, and serving static files.