RESTful API 是一个基于 REST 架构风格的 Web 服务,可以通过 HTTP 响应来传输数据,使用 Node.js 和 Express 可以轻松创建一个 RESTful API 服务,而 MongoDB 则是非常受前端开发者青睐的一种 NoSQL 数据库,本文将介绍如何使用它们来创建一个简单的 RESTful API 服务。
准备工作
首先需要安装 Node.js 和 MongoDB,以及一些必要的 Node.js 包:
npm init -y npm install express mongoose body-parser morgan --save
这里使用的是 Express 作为服务端开发框架,Mongoose 作为 MongoDB 的 ODM(对象文档映射),Body-parser 用于解析请求体,Morgan 用于记录日志。
创建 Express 应用
首先,创建一个名为 server.js 的文件用于启动服务和定义路由:
// javascriptcn.com 代码示例 const express = require('express'); const bodyParser = require('body-parser'); const morgan = require('morgan'); const mongoose = require('mongoose'); const app = express(); // 解析请求体 app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); // 记录请求日志 app.use(morgan('combined')); // 建立 MongoDB 连接 mongoose.connect('mongodb://localhost/restapi'); // 定义路由 app.get('/', (req, res) => { res.json({ message: 'Hello, world!' }); }); // 启动服务 const port = process.env.PORT || 8080; app.listen(port, () => { console.log(`Server running on port ${port}`); });
这里使用了 ES6 的语法,通过调用 express() 方法来创建 Express 应用,然后使用 app.use() 方法来添加中间件,使用 app.get() 方法来定义路由,最后使用 app.listen() 方法来启动服务。
定义 MongoDB 模型和控制器
接下来,我们需要创建一个 MongoDB 模型和一个控制器,用于对数据进行增删改查操作:
// javascriptcn.com 代码示例 const mongoose = require('mongoose'); const Schema = mongoose.Schema; // 定义用户模型 const UserSchema = new Schema({ name: String, email: String, }); // 定义用户控制器 const UserController = { // 获取所有用户 getUsers(req, res) { User.find((err, users) => { if (err) { return res.json({ error: err }); } res.json(users); }); }, // 添加一个用户 addUser(req, res) { const user = new User({ name: req.body.name, email: req.body.email, }); user.save((err) => { if (err) { return res.json({ error: err }); } res.json(user); }); }, // 根据 ID 获取用户 getUser(req, res) { User.findById(req.params.id, (err, user) => { if (err) { return res.json({ error: err }); } res.json(user); }); }, // 更新用户信息 updateUser(req, res) { User.findByIdAndUpdate(req.params.id, { name: req.body.name, email: req.body.email, }, { new: true }, (err, user) => { if (err) { return res.json({ error: err }); } res.json(user); }); }, // 删除用户 deleteUser(req, res) { User.findByIdAndRemove(req.params.id, (err, user) => { if (err) { return res.json({ error: err }); } res.json(user); }); }, }; // 导出用户模型和控制器 const User = mongoose.model('User', UserSchema); module.exports = UserController;
这里使用了 Mongoose 的 Schema 和 Model,定义了一个名为 User 的模型,并定义了一个名为 UserController 的控制器,其中包括获取所有用户、添加一个用户、根据 ID 获取用户、更新用户信息和删除用户等操作。
定义 Express 路由
接下来需要将 UserController 添加到 Express 路由中,使其可以被访问:
// javascriptcn.com 代码示例 const express = require('express'); const bodyParser = require('body-parser'); const morgan = require('morgan'); const mongoose = require('mongoose'); const UserController = require('./user.controller'); const app = express(); // 解析请求体 app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); // 记录请求日志 app.use(morgan('combined')); // 建立 MongoDB 连接 mongoose.connect('mongodb://localhost/restapi'); // 定义路由 app.get('/', (req, res) => { res.json({ message: 'Hello, world!' }); }); app.route('/users') .get(UserController.getUsers) .post(UserController.addUser); app.route('/users/:id') .get(UserController.getUser) .put(UserController.updateUser) .delete(UserController.deleteUser); // 启动服务 const port = process.env.PORT || 8080; app.listen(port, () => { console.log(`Server running on port ${port}`); });
这里添加了中间件 UserController 并定义了用户相关的路由,其中通过 app.route() 方法可以实现链式调用,使代码更加简洁,易于阅读和维护。
测试 API
现在可以使用 Postman 或其他工具来测试 API 是否正常工作,例如:
- GET /: 返回
{ "message": "Hello, world!" }
- GET /users: 返回所有用户数据
- POST /users: 添加一个用户
- GET /users/:id: 返回 ID 对应的用户数据
- PUT /users/:id: 更新 ID 对应的用户数据
- DELETE /users/:id: 删除 ID 对应的用户数据
总结
在本文中,我们使用 Node.js、MongoDB 和 Express 创建了一个简单的 RESTful API 服务,并实现了对用户数据的增删改查操作。在实际开发中,可以根据需要使用不同的数据库和框架来构建更加灵活和可扩展的服务,希望本文能够对您在开发过程中有所帮助。完整的示例代码可以在 GitHub 上查看和下载。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6544afcf7d4982a6ebe870a1