06 - Node.js 后端开发入门

视频教程BV1vVyeYMEAs

视频链接BV1vVyeYMEAs
发布日期:2024-10-21
视频时长:21:51
播放量:27.7万
所属合集:零基础AI全栈开发系列

视频概要

后端开发的第一课。使用Node.js + Express框架搭建后端服务器,创建RESTful API接口,并连接MongoDB数据库。覆盖服务端概念、Express路由、中间件、CORS跨域、Mongoose数据模型、云函数/Serverless等知识。


知识点清单

A. Node.js 基础

知识点说明重要程度
Node.js是什么基于Chrome V8引擎的JavaScript运行时,让JS可以在浏览器外运行★★★★★
为什么学Node.js前后端同一种语言,降低学习成本★★★★★
npmNode Package Manager,包管理工具★★★★★
CommonJSNode.js传统模块系统(require/module.exports★★★★
ES Modules新一代模块系统(import/export),推荐使用★★★★
nvmNode版本管理器,方便切换不同Node版本★★★★
# 验证Node.js安装
node -v    # 查看版本
npm -v     # 查看npm版本

# 初始化项目
mkdir my-server
cd my-server
npm init -y     # 生成 package.json

# 安装Express
npm install express

# 设置国内镜像(加速下载)
npm config set registry https://registry.npmmirror.com

B. Express 框架

// index.js
const express = require('express');
const app = express();
const port = 3000;

// 中间件:解析JSON请求体
app.use(express.json());

// 中间件:跨域支持(CORS)
app.use((req, res, next) => {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE');
    res.header('Access-Control-Allow-Headers', 'Content-Type');
    next();
});

// 路由:GET 获取列表
app.get('/get_list', async (req, res) => {
    try {
        const todos = await Todo.find();
        res.json({ code: 200, data: todos });
    } catch (error) {
        res.status(500).json({ code: 500, message: '服务器错误' });
    }
});

// 路由:POST 添加数据
app.post('/add', async (req, res) => {
    const { name } = req.body;
    const todo = new Todo({ name, completed: false });
    await todo.save();
    res.json({ code: 200, message: "添加成功" });
});

// 路由:PUT 更新数据
app.put('/update_todo', async (req, res) => {
    const { id, completed } = req.body;
    await Todo.findByIdAndUpdate(id, { completed });
    res.json({ code: 200, message: "更新成功" });
});

// 路由:DELETE 删除数据
app.delete('/del_todo', async (req, res) => {
    await Todo.findByIdAndDelete(req.body.id);
    res.json({ code: 200, message: "删除成功" });
});

// 启动服务器
app.listen(port, () => {
    console.log(`服务器运行在 http://localhost:${port}`);
});

C. Express核心概念

概念说明示例
路由(Routing)URL路径与处理函数的映射app.get('/users', handler)
中间件(Middleware)请求处理管道中的函数,可在路由前后执行app.use(express.json())
req(请求对象)包含客户端发来的数据req.body(POST数据), req.params(URL参数), req.query(查询参数)
res(响应对象)用于向客户端返回数据res.json(), res.send(), res.status()
listen服务器绑定端口等待请求app.listen(3000)
next()中间件中调用,传递到下一个处理函数next()

D. 项目目录结构

my-server/
├── package.json          # 项目配置和依赖列表
├── package-lock.json     # 依赖锁定文件
├── node_modules/         # 依赖包(npm install自动生成)
├── index.js              # 入口文件(服务器启动)
├── routes/               # 路由目录
│   └── api.js            # API路由定义
├── models/               # 数据模型目录
│   └── todo.js           # Todo数据模型
└── config/               # 配置文件目录
    └── db.js             # 数据库连接配置

E. MongoDB + Mongoose

// 安装: npm install mongoose
const mongoose = require('mongoose');

// 连接数据库
mongoose.connect('mongodb://localhost:27017/mydb');

// 定义数据模型(Schema)
const todoSchema = new mongoose.Schema({
    title: String,
    completed: Boolean,
    createdAt: { type: Date, default: Date.now }
});

const Todo = mongoose.model('Todo', todoSchema);

// CRUD 操作
// 创建
const newTodo = new Todo({ title: "学习Node.js", completed: false });
await newTodo.save();

// 查询所有
const todos = await Todo.find();

// 条件查询
const completed = await Todo.find({ completed: true });

// 按ID查询
const todo = await Todo.findById("some_id");

// 更新
await Todo.findByIdAndUpdate("some_id", { completed: true });

// 删除
await Todo.findByIdAndDelete("some_id");

F. MongoDB核心概念

知识点说明SQL对应
数据库(Database)数据的逻辑容器数据库
集合(Collection)文档的集合表(Table)
文档(Document)单条数据记录,JSON格式行(Row)
字段(Field)文档中的键值对列(Column)
_id自动生成的唯一标识主键(Primary Key)
MongooseNode.js的MongoDB ODM工具ORM

G. 云函数/Serverless

知识点说明重要程度
Serverless无需管理服务器的后端方案★★★
云函数上传代码,平台自动运行★★★
按需计费用的时候才启动,不用不收费★★★
与传统服务器区别Serverless按调用计费,传统服务器按时间计费★★★
注意:Serverless并不是真的没有服务器,而是开发者不需要管理服务器。

常见问题

问题解答
Node.js和JavaScript什么关系?Node.js让JS可以在浏览器外运行,用同一种语言写前后端
服务器一直在starting?可能是网络问题,等10分钟左右;或检查端口是否被占用
CORS跨域错误怎么解决?在Express中添加CORS中间件,设置 Access-Control-Allow-Origin: *
npm i要在哪运行?在项目目录(如my-vue-app)中运行,不是在根目录
localhost:3000打不开?确认服务器已启动(控制台显示"服务器运行在"),检查端口
接口和路由是什么关系?路由就是接口的实现,一个URL路径对应一个处理函数
Mongoose和MongoDB什么关系?Mongoose是Node.js操作MongoDB的工具库,封装了底层操作

前置知识检查

  • [x] 了解JavaScript基础语法
  • [x] 了解HTTP请求方法(GET/POST/PUT/DELETE)
  • [x] 会使用npm安装依赖
  • [x] 了解JSON数据格式

学习建议

  • 本集是从"前端开发者"到"全栈开发者"的跨越,重点理解Express路由和中间件
  • CORS跨域是新手最常遇到的问题,中间件设置务必加上
  • MongoDB连接串中的 mydb 可以自定义,数据库不存在时会自动创建
  • 建议在Sealos上创建云数据库,跟着练习
返回首页