使用 Node.js 和 Express 构建 REST API:完整教程
作者:xiaoxin.gao · 2025-07-03 · 阅读时间:5分钟
引言 在这篇教程中,我们将介绍如何使用 Node.js、Express 和 MongoDB 构建一个功能齐全的 […]
引言
在这篇教程中,我们将介绍如何使用 Node.js、Express 和 MongoDB 构建一个功能齐全的 RESTful API。这个教程适合 编程初学者 和 Web 开发爱好者,通过实际项目来学习如何进行 API 开发、数据库连接以及后端开发中的常见操作。
环境准备
安装 Node.js 和 Express
首先,确保你已经安装了 Node.js。然后,我们使用 Express 来简化 API 的创建流程:
-
初始化 Node.js 项目:
npm init -y
-
安装 Express 和 Mongoose(用于与 MongoDB 交互):
npm install express mongoose
安装开发工具
接下来,我们安装开发时常用的工具:
- dotenv:处理环境变量。
- nodemon:自动重启服务器。
npm install --save-dev dotenv nodemon
创建服务器
配置 Express 服务器
在 server.js
文件中配置服务器:
const express = require('express');
const app = express();
const mongoose = require('mongoose');
const dotenv = require('dotenv');
// 加载环境变量
dotenv.config();
// 连接 MongoDB
mongoose.connect(process.env.DATABASE_URL, { useNewUrlParser: true, useUnifiedTopology: true })
.then(() => console.log('连接到数据库成功'))
.catch((err) => console.error('连接数据库失败:', err));
app.listen(3000, () => {
console.log('服务器启动,监听端口 3000');
});
配置数据库连接
使用 Mongoose 连接到 MongoDB 数据库。我们将数据库连接字符串存储在 .env
文件中,以避免泄露敏感信息:
DATABASE_URL=mongodb://localhost:27017/subscribers
创建数据库模型
定义订阅者模型
接下来,使用 Mongoose 创建一个订阅者模型:
const mongoose = require('mongoose');
const subscriberSchema = new mongoose.Schema({
name: {
type: String,
required: true
},
subscribedToChannel: {
type: String,
required: true
},
subscribeDate: {
type: Date,
required: true,
default: Date.now
}
});
module.exports = mongoose.model('Subscriber', subscriberSchema);
创建路由
配置 RESTful 路由
我们为订阅者创建以下 API 路由:
GET /subscribers
:获取所有订阅者。GET /subscribers/:id
:根据 ID 获取特定订阅者。POST /subscribers
:添加新的订阅者。PATCH /subscribers/:id
:更新订阅者信息。DELETE /subscribers/:id
:删除订阅者。
const express = require('express');
const Subscriber = require('./models/subscriber');
const router = express.Router();
// 获取所有订阅者
router.get('/subscribers', async (req, res) => {
try {
const subscribers = await Subscriber.find();
res.json(subscribers);
} catch (err) {
res.status(500).json({ message: '服务器错误' });
}
});
// 获取指定 ID 的订阅者
router.get('/subscribers/:id', async (req, res) => {
try {
const subscriber = await Subscriber.findById(req.params.id);
if (!subscriber) {
return res.status(404).json({ message: '未找到订阅者' });
}
res.json(subscriber);
} catch (err) {
res.status(500).json({ message: '服务器错误' });
}
});
// 添加新订阅者
router.post('/subscribers', async (req, res) => {
const subscriber = new Subscriber({
name: req.body.name,
subscribedToChannel: req.body.subscribedToChannel
});
try {
const newSubscriber = await subscriber.save();
res.status(201).json(newSubscriber);
} catch (err) {
res.status(400).json({ message: '请求无效,缺少必填字段' });
}
});
// 更新订阅者
router.patch('/subscribers/:id', async (req, res) => {
try {
const subscriber = await Subscriber.findById(req.params.id);
if (!subscriber) {
return res.status(404).json({ message: '未找到订阅者' });
}
if (req.body.name) subscriber.name = req.body.name;
if (req.body.subscribedToChannel) subscriber.subscribedToChannel = req.body.subscribedToChannel;
const updatedSubscriber = await subscriber.save();
res.json(updatedSubscriber);
} catch (err) {
res.status(400).json({ message: '请求无效' });
}
});
// 删除订阅者
router.delete('/subscribers/:id', async (req, res) => {
try {
const subscriber = await Subscriber.findById(req.params.id);
if (!subscriber) {
return res.status(404).json({ message: '未找到订阅者' });
}
await subscriber.remove();
res.json({ message: '已删除订阅者' });
} catch (err) {
res.status(500).json({ message: '服务器错误' });
}
});
module.exports = router;
设置中间件
通过中间件函数 getSubscriber
来获取订阅者信息,避免在每个路由中重复代码。
const getSubscriber = async (req, res, next) => {
try {
const subscriber = await Subscriber.findById(req.params.id);
if (!subscriber) {
return res.status(404).json({ message: '未找到订阅者' });
}
res.subscriber = subscriber;
next();
} catch (err) {
res.status(500).json({ message: '服务器错误' });
}
};
测试和调试
使用 Postman 或 Visual Studio Code 的 REST Client 插件测试 API 路由,确保 CRUD 操作(创建、读取、更新、删除)都能正常工作。
示例请求
-
获取所有订阅者:
GET http://localhost:3000/subscribers
-
添加订阅者:
POST http://localhost:3000/subscribers Content-Type: application/json { "name": "John Doe", "subscribedToChannel": "Web Dev Simplified" }
总结
通过本教程,我们学习了如何使用 Node.js、Express 和 MongoDB 创建一个 RESTful API。从环境设置到数据库操作,再到路由配置和中间件,您已经掌握了构建 API 的基础知识。接下来,您可以根据需求扩展该 API,加入更多功能,优化性能,或进行安全加固。
原文引自YouTube视频:https://www.youtube.com/watch?v=fgTGADljAeg
热门推荐
一个账号试用1000+ API
助力AI无缝链接物理世界 · 无需多次注册
3000+提示词助力AI大模型
和专业工程师共享工作效率翻倍的秘密
热门API
- 1. AI文本生成
- 2. AI图片生成_文生图
- 3. AI图片生成_图生图
- 4. AI图像编辑
- 5. AI视频生成_文生视频
- 6. AI视频生成_图生视频
- 7. AI语音合成_文生语音
- 8. AI文本生成(中国)
最新文章
- 使用Python进行API调用:面向开发人员的分步指南
- Go工程化(五) API 设计下: 基于 protobuf 自动生成 gin 代码
- Python调用股票API获取实时数据
- API在量子计算中的作用
- API请求 – 什么是API请求?
- 给初学者的RESTful API 安全设计指南!
- 如何在 Facebook Developers 上设置 WhatsApp Cloud API
- 支付网关API如何支持小型企业?
- Python调用免费翻译API实现Excel文件批量翻译
- 为开源项目 go-gin-api 增加 WebSocket 模块
- AI编程的风险,如何毁掉你的 API?
- 使用预约调度API的运输管理