在现代 Web 开发中,数据存储和管理是非常重要的一环。而 MongoDB 是一种 NoSQL 数据库,它具有高度的灵活性和可扩展性,非常适合用于构建大规模应用程序。Node.js 是一个基于 JavaScript 运行时的平台,它可以帮助我们快速搭建 Web 服务器和 RESTful API。本文将介绍如何使用 Node.js 和 MongoDB 实现简单的 CRUD 操作。
环境准备
在开始之前,我们需要先安装 Node.js 和 MongoDB。这里以 Ubuntu 为例,演示如何安装:
安装 Node.js
可以通过 nvm(Node Version Manager)来安装和管理 Node.js。首先,需要安装 nvm:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
安装完成后,重启终端,然后就可以通过 nvm 安装 Node.js 了:
nvm install node
安装 MongoDB
可以通过 apt-get 命令来安装 MongoDB:
sudo apt-get install mongodb
安装完成后,可以使用以下命令来启动 MongoDB 服务:
sudo service mongodb start
创建项目
接下来,我们需要创建一个新的 Node.js 项目。可以使用以下命令来创建:
mkdir node-mongodb-demo cd node-mongodb-demo npm init -y
安装依赖
在项目中,我们需要安装一些依赖,包括 Express、Mongoose 和 Body-parser。可以使用以下命令来安装:
npm install express mongoose body-parser --save
连接 MongoDB
在开始编写代码之前,我们需要先连接 MongoDB 数据库。可以使用 Mongoose 来连接 MongoDB。在项目的根目录下,创建一个名为 db.js
的文件,并输入以下代码:
const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost:27017/node-mongodb-demo', { useNewUrlParser: true, useUnifiedTopology: true }); const db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error:')); db.once('open', function() { console.log('Connected to MongoDB'); });
在代码中,我们使用 mongoose.connect
方法连接 MongoDB,其中第一个参数是 MongoDB 的连接地址,第二个参数是一些选项,包括使用新的 URL 解析器和使用新的服务器发现和监视引擎。在连接成功后,会打印出 Connected to MongoDB
。
创建模型
在 MongoDB 中,数据存储在集合(Collection)中,而集合又属于数据库(Database)。在 Mongoose 中,我们需要先定义一个模型(Model),然后才能使用这个模型来操作数据库。在项目的根目录下,创建一个名为 user.js
的文件,并输入以下代码:
const mongoose = require('mongoose'); const userSchema = new mongoose.Schema({ name: String, age: Number, email: String }); const User = mongoose.model('User', userSchema); module.exports = User;
在代码中,我们定义了一个名为 User
的模型,它有三个属性:name
、age
和 email
。然后,我们使用 mongoose.model
方法将模型和集合关联起来,并将其导出。
创建路由
在项目中,我们需要创建一些路由,用来处理 HTTP 请求。在项目的根目录下,创建一个名为 routes.js
的文件,并输入以下代码:
const express = require('express'); const bodyParser = require('body-parser'); const User = require('./user'); const router = express.Router(); router.use(bodyParser.urlencoded({ extended: true })); router.use(bodyParser.json()); router.get('/users', function(req, res) { User.find(function(err, users) { if (err) { res.status(500).send(err); } else { res.send(users); } }); }); router.get('/users/:id', function(req, res) { User.findById(req.params.id, function(err, user) { if (err) { res.status(500).send(err); } else { res.send(user); } }); }); router.post('/users', function(req, res) { const user = new User(req.body); user.save(function(err, user) { if (err) { res.status(500).send(err); } else { res.send(user); } }); }); router.put('/users/:id', function(req, res) { User.findByIdAndUpdate(req.params.id, req.body, { new: true }, function(err, user) { if (err) { res.status(500).send(err); } else { res.send(user); } }); }); router.delete('/users/:id', function(req, res) { User.findByIdAndRemove(req.params.id, function(err, user) { if (err) { res.status(500).send(err); } else { res.send(user); } }); }); module.exports = router;
在代码中,我们使用 Express 的 Router
来创建路由,然后使用 body-parser
中间件来解析 HTTP 请求体。在路由中,我们定义了五个路由处理程序,分别用于获取所有用户、获取单个用户、创建用户、更新用户和删除用户。在每个路由处理程序中,我们使用 Mongoose 来操作 MongoDB 数据库。
启动应用
最后,我们需要在应用中启用路由。在项目的根目录下,创建一个名为 app.js
的文件,并输入以下代码:
const express = require('express'); const db = require('./db'); const routes = require('./routes'); const app = express(); app.use('/api', routes); app.listen(3000, function() { console.log('Server listening on port 3000'); });
在代码中,我们使用 Express 来创建应用,并使用 app.use
方法来启用路由。在启动应用时,会打印出 Server listening on port 3000
。
测试应用
现在,我们可以使用 Postman 或 curl 等工具来测试应用。以下是一些常用的测试操作:
获取所有用户
GET http://localhost:3000/api/users
获取单个用户
GET http://localhost:3000/api/users/:id
创建用户
POST http://localhost:3000/api/users { "name": "John Doe", "age": 30, "email": "john.doe@example.com" }
更新用户
PUT http://localhost:3000/api/users/:id { "name": "Jane Doe", "age": 25, "email": "jane.doe@example.com" }
删除用户
DELETE http://localhost:3000/api/users/:id
总结
本文介绍了如何使用 Node.js 和 MongoDB 实现简单的 CRUD 操作。首先,我们连接了 MongoDB 数据库,然后定义了一个模型用来操作数据库。接着,我们创建了路由用来处理 HTTP 请求,并使用 Mongoose 来操作 MongoDB 数据库。最后,我们启动了应用并测试了它。这个应用可以作为一个简单的 RESTful API,用来存储和管理用户数据。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65c46fe0add4f0e0ffeef30c