第1课_Node.js+Koa2+MongoDB全栈项目
热度🔥:29 免费课程
授课语音
综合运用 Node.js + Koa2 + MongoDB 实现电商全栈项目后端
在本课程中,我们将通过结合 Node.js、Koa2 框架和 MongoDB 数据库,构建一个电商平台的后端部分。我们将覆盖如何处理用户认证、商品管理、订单处理等常见功能,并讲解如何在电商项目中集成这些技术栈。
1. 项目架构概述
1.1 Node.js + Koa2
- Node.js:作为后端 JavaScript 运行环境,Node.js 提供了强大的异步 I/O 支持,使得构建高性能的后端应用成为可能。
- Koa2:Koa 是由 Express 团队打造的新一代 Web 框架,它基于现代的 JavaScript 特性,支持异步函数和中间件,结构灵活且易于扩展。
1.2 MongoDB 数据库
MongoDB 是一个 NoSQL 数据库,它适用于存储 JSON 格式的数据,支持高并发读取和写入,是电商平台中常用的数据库解决方案。
2. 环境搭建
2.1 安装 Node.js 和 Koa2
# 初始化 Node.js 项目
npm init -y
# 安装 Koa2 和相关依赖
npm install koa koa-router koa-bodyparser
2.2 安装 MongoDB 相关依赖
# 安装 MongoDB 驱动库
npm install mongoose
2.3 配置 Koa2 项目结构
- 项目目录结构:
/project ├── /node_modules ├── /src ├── /controllers ├── /models ├── /routes ├── app.js ├── package.json
3. 连接 MongoDB 数据库
在后端项目中,首先需要连接 MongoDB 数据库。我们使用 mongoose
库来操作 MongoDB。
3.1 MongoDB 配置文件
// src/db.js
const mongoose = require('mongoose');
// 连接 MongoDB 数据库
mongoose.connect('mongodb://localhost:27017/ecommerce', { useNewUrlParser: true, useUnifiedTopology: true });
// 监听连接错误
mongoose.connection.on('error', (err) => {
console.log('数据库连接失败:', err);
});
// 监听连接成功
mongoose.connection.on('open', () => {
console.log('数据库连接成功');
});
3.2 启动 MongoDB 服务
# 启动本地 MongoDB 服务
mongod --dbpath=/data/db
4. 构建后端 API
4.1 用户模型与接口
我们首先定义用户模型,并实现用户注册与登录接口。
// src/models/User.js
const mongoose = require('mongoose');
// 定义用户模型
const userSchema = new mongoose.Schema({
username: { type: String, required: true, unique: true },
password: { type: String, required: true },
email: { type: String, required: true, unique: true }
});
// 导出用户模型
module.exports = mongoose.model('User', userSchema);
4.2 用户注册接口
// src/controllers/userController.js
const User = require('../models/User');
async function register(ctx) {
const { username, password, email } = ctx.request.body;
// 检查用户是否已存在
const existingUser = await User.findOne({ username });
if (existingUser) {
ctx.status = 400;
ctx.body = { message: '用户名已存在' };
return;
}
// 创建新用户
const newUser = new User({ username, password, email });
await newUser.save();
ctx.status = 201;
ctx.body = { message: '注册成功' };
}
module.exports = { register };
4.3 用户路由
// src/routes/userRoutes.js
const Router = require('koa-router');
const userController = require('../controllers/userController');
const userRouter = new Router();
userRouter.post('/register', userController.register);
module.exports = userRouter;
4.4 集成路由到 Koa2 应用
// app.js
const Koa = require('koa');
const bodyParser = require('koa-bodyparser');
const mongoose = require('mongoose');
const userRouter = require('./src/routes/userRoutes');
// 创建 Koa 应用
const app = new Koa();
// 解析请求体
app.use(bodyParser());
// 使用用户路由
app.use(userRouter.routes()).use(userRouter.allowedMethods());
// 连接 MongoDB 数据库
require('./src/db');
// 启动服务器
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
5. 商品模型与接口
5.1 商品模型
// src/models/Product.js
const mongoose = require('mongoose');
// 定义商品模型
const productSchema = new mongoose.Schema({
name: { type: String, required: true },
price: { type: Number, required: true },
description: { type: String },
category: { type: String }
});
// 导出商品模型
module.exports = mongoose.model('Product', productSchema);
5.2 商品添加接口
// src/controllers/productController.js
const Product = require('../models/Product');
async function addProduct(ctx) {
const { name, price, description, category } = ctx.request.body;
// 创建新商品
const newProduct = new Product({ name, price, description, category });
await newProduct.save();
ctx.status = 201;
ctx.body = { message: '商品添加成功' };
}
module.exports = { addProduct };
5.3 商品路由
// src/routes/productRoutes.js
const Router = require('koa-router');
const productController = require('../controllers/productController');
const productRouter = new Router();
productRouter.post('/add', productController.addProduct);
module.exports = productRouter;
6. 订单模型与接口
6.1 订单模型
// src/models/Order.js
const mongoose = require('mongoose');
// 定义订单模型
const orderSchema = new mongoose.Schema({
userId: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true },
products: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Product' }],
totalAmount: { type: Number, required: true },
status: { type: String, default: 'pending' }
});
// 导出订单模型
module.exports = mongoose.model('Order', orderSchema);
6.2 订单创建接口
// src/controllers/orderController.js
const Order = require('../models/Order');
async function createOrder(ctx) {
const { userId, products, totalAmount } = ctx.request.body;
const newOrder = new Order({ userId, products, totalAmount });
await newOrder.save();
ctx.status = 201;
ctx.body = { message: '订单创建成功' };
}
module.exports = { createOrder };
6.3 订单路由
// src/routes/orderRoutes.js
const Router = require('koa-router');
const orderController = require('../controllers/orderController');
const orderRouter = new Router();
orderRouter.post('/create', orderController.createOrder);
module.exports = orderRouter;
7. 总结
通过本课程,我们学会了如何使用 Node.js、Koa2 和 MongoDB 构建电商平台的后端部分。我们实现了用户注册、商品管理和订单处理等功能。在实际应用中,这些功能可以根据需求进行扩展和优化。
7.1 核心要点
- Node.js 与 Koa2:提供高效的异步编程和简洁的路由定义。
- MongoDB:作为 NoSQL 数据库,适用于存储电商平台的动态数据。
- 数据模型:通过 Mongoose 定义数据模型并实现 CRUD 操作。
- 中间件:使用 Koa 中间件处理请求和响应。
掌握这些技术将帮助你构建出功能强大、性能优化的电商平台后端系统。