express使用Mongoose连接MongoDB操作示例「附源码下载」

在Node.js开发中,Express是一个非常常用的框架,而Mongoose则是一个非常流行的对象文档映射工具,用于连接MongoDB数据库。本文将介绍如何使用Express和Mongoose连接MongoDB,并进行相关的操作示例。

1. 安装Express和Mongoose

在开始之前,必须先安装Express和Mongoose,可以通过npm进行安装。在命令行中输入以下命令:

npm install express mongoose --save

其中,`--save`参数可以将安装信息保存到`package.json`文件中,方便后续管理。

2. 配置Express应用

在开始连接MongoDB前,首先需要进行Express应用的基本配置。在项目根目录下创建`app.js`文件,并输入以下内容:

const express = require('express');

const app = express();

app.use(express.json());

app.use(express.urlencoded({ extended: true }));

const port = 3000;

app.listen(port, () => {

console.log(`App listening at http://localhost:${port}`);

});

以上代码中,我们导入了`express`库,并将其赋值给`app`变量。接着,我们使用`app.use`方法,分别启用了JSON解析和url编码解析中间件。最后通过`app.listen`方法启动Express应用。

3. 连接MongoDB

接下来,我们需要使用Mongoose来连接MongoDB数据库。在`app.js`中添加以下代码:

const mongoose = require('mongoose');

const mongoURI = 'mongodb://localhost/my_database';

mongoose.connect(mongoURI, {

useNewUrlParser: true,

useUnifiedTopology: true

}).then(() => {

console.log('MongoDB connected');

}).catch(error => {

console.log(error);

});

以上代码中,我们首先导入了`mongoose`库。接下来,我们定义了连接MongoDB所需要的URI,即`mongodb://localhost/my_database`。如果MongoDB实例不是运行在本机,可以将`localhost`替换成对应的主机名或IP地址。`my_database`指定了要连接的数据库名称,如果该数据库不存在,则会自动创建。

接着,我们使用`mongoose.connect`方法来连接MongoDB,并传入连接选项。其中,`useNewUrlParser`和`useUnifiedTopology`分别用于告知Mongoose使用MongoDB驱动新的解析器和拓扑结构引擎。最后,我们在`then`回调函数中打印连接成功的信息,在`catch`回调函数中打印连接失败的原因。

4. 定义数据模型

在使用Mongoose进行数据操作前,需要先定义数据模型。在`app.js`文件中添加以下代码:

const mongoose = require('mongoose');

const todoSchema = new mongoose.Schema({

title: {

type: String,

required: true

},

completed: {

type: Boolean,

default: false

},

createdAt: {

type: Date,

default: Date.now

}

});

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

以上代码中,我们首先定义了一个名为`todoSchema`的Mongoose schema。该schema定义了Todo数据的字段和类型,其中`title`为必填字段,类型为字符串;`completed`为选填字段,类型为布尔值,初始值为`false`;`createdAt`为只读字段,类型为日期类型,初始值为当前时间。

接着,我们使用`mongoose.model`方法将`todoSchema`与名为`Todo`的模型绑定。此时,我们就可以使用`Todo`模型对MongoDB中的`todo`集合进行操作了。

5. 增删改查数据

接下来,我们将使用`Todo`模型进行增删改查操作。在`app.js`文件中添加以下代码:

5.1 添加新数据

app.post('/todos', async (req, res) => {

try {

const todo = new Todo(req.body);

await todo.save();

res.status(201).json(todo);

} catch (error) {

console.log(error);

res.status(500).json({ message: 'Server error' });

}

});

以上代码中,我们使用`app.post`方法创建了一个路由,当发起POST请求时,会执行以下操作:

1. 从请求体中获取`title`和`completed`字段的值。

2. 创建一个`Todo`实例,并传入上述两个字段的值。

3. 使用`await`关键字调用`save`方法,将新数据保存到MongoDB中。

4. 使用`res.status`方法设置响应码为201,并返回新增的`todo`对象。

如果在这个过程中出现了错误,将打印错误信息,并返回500状态码和错误信息。

5.2 获取全部数据

app.get('/todos', async (req, res) => {

try {

const todos = await Todo.find();

res.json(todos);

} catch (error) {

console.log(error);

res.status(500).json({ message: 'Server error' });

}

});

以上代码中,我们使用`app.get`方法创建一个路由,当发起GET请求时,会执行以下操作:

1. 使用`await`关键字调用`Todo.find`方法,获取MongoDB中`todo`集合中的全部数据。

2. 使用`res.json`方法将查询结果返回给客户端。

如果查询过程中出现了错误,将打印错误信息,并返回500状态码和错误信息。

5.3 获取指定数据

app.get('/todos/:id', async (req, res) => {

try {

const todo = await Todo.findById(req.params.id);

if (!todo) {

return res.status(404).json({ message: 'Todo not found' });

}

res.json(todo);

} catch (error) {

console.log(error);

res.status(500).json({ message: 'Server error' });

}

});

以上代码中,我们使用`app.get`方法创建一个路由,当发起GET请求时,会执行以下操作:

1. 使用`Todo.findById`方法,根据路由参数中的`id`值,获取MongoDB中`todo`集合中指定的一条数据。

2. 如果该数据不存在,则返回404状态码和错误信息。

3. 如果查询成功,使用`res.json`方法将查询结果返回给客户端。

如果查询过程中出现了错误,将打印错误信息,并返回500状态码和错误信息。

5.4 更新一条数据

app.put('/todos/:id', async (req, res) => {

try {

const todo = await Todo.findByIdAndUpdate(req.params.id, req.body, {

new: true

});

if (!todo) {

return res.status(404).json({ message: 'Todo not found' });

}

res.json(todo);

} catch (error) {

console.log(error);

res.status(500).json({ message: 'Server error' });

}

});

以上代码中,我们使用`app.put`方法创建一个路由,当发起PUT请求时,会执行以下操作:

1. 使用`Todo.findByIdAndUpdate`方法,根据路由参数中的`id`值,更新MongoDB中`todo`集合中指定的一条数据。

2. 将请求体中的数据作为更新的内容。

3. 使用`{ new: true }`选项表示返回更新后的数据。

4. 如果更新的数据不存在,返回404状态码和错误信息。

5. 如果成功更新数据,使用`res.json`方法将更新后的数据返回给客户端。

如果更新过程中出现了错误,将打印错误信息,并返回500状态码和错误信息。

5.5 删除一条数据

app.delete('/todos/:id', async (req, res) => {

try {

const todo = await Todo.findByIdAndDelete(req.params.id);

if (!todo) {

return res.status(404).json({ message: 'Todo not found' });

}

res.json(todo);

} catch (error) {

console.log(error);

res.status(500).json({ message: 'Server error' });

}

});

以上代码中,我们使用`app.delete`方法创建一个路由,当发起DELETE请求时,会执行以下操作:

1. 使用`Todo.findByIdAndDelete`方法,根据路由参数中的`id`值,从MongoDB中`todo`集合中删除一条数据。

2. 如果删除的数据不存在,返回404状态码和错误信息。

3. 如果成功删除数据,使用`res.json`方法将删除的数据返回给客户端。

如果删除过程中出现了错误,将打印错误信息,并返回500状态码和错误信息。

6. 总结

本文介绍了如何使用Express和Mongoose连接MongoDB,并对数据进行增删改查操作。通过本文的示例代码,相信读者可以快速学习如何使用Express和Mongoose进行MongoDB数据库操作。

数据库标签