node.js基础学习-mongoose操作MongoDB(十二)

一、前言

在 Node.js 应用中,路由用于处理不同的 URL 路径请求,决定应该执行什么操作;而 Mongoose 用于与 MongoDB 数据库进行交互,如进行数据的存储、查询、更新和删除。它们结合使用可以构建功能强大的 Web 应用,实现根据不同的请求对数据库进行相应的操作。

二、以 Express 框架为例说明结合方式

1. 项目设置与基础依赖安装

首先创建一个 Node.js 项目,npm init生成package.json,在项目目录下通过npm install express mongoose安装 Express 和 Mongoose。假设还使用body - parser中间件来处理请求体数据(在 Express 4.16 + 版本中,express.urlencodedexpress.json中间件已经内置,可以代替body - parser部分功能)。

2. 连接数据库(使用 Mongoose)

在项目的入口文件(如app.js)中,引入 Mongoose 并连接到数据库。

js 复制代码
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/your_database_name', {
  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 successfully");
});

这里your_database_name是要连接的数据库名称,连接选项useNewUrlParseruseUnifiedTopology是为了避免一些连接警告和问题。

3. 定义数据模型(使用 Mongoose)

在单独的文件(如models/user.js)中定义数据模型。例如,定义一个用户模型:

js 复制代码
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true
  },
  age: {
    type: Number,
    default: 0
  },
  email: {
    type: String,
    unique: true,
    match: /^\S+@\S+\.\S+$/
  }
});
const User = mongoose.model('User', userSchema);
module.exports = User;

4. 创建路由(使用 Express)并结合 Mongoose 操作

app.js或者专门的路由文件(如routes/userRoutes.js)中创建路由,并在路由处理函数中使用 Mongoose 模型进行数据库操作。

查询操作示例

js 复制代码
const express = require('express');
const router = express.Router();
const User = require('../models/user');
// 查询所有用户的路由
router.get('/users', async (req, res) => {
  try {
    const users = await User.find();
    res.send(users);
  } catch (e) {
    console.error(e);
    res.status(500).send({ error: 'Internal Server Error' });
  }
});
module.exports = router;

这里定义了一个GET /users路由,当客户端发送请求到这个路径时,会调用async函数。在函数内部,使用User.find()方法(User是之前定义的 Mongoose 模型)查询所有用户数据。如果查询成功,将用户数据发送回客户端;如果出现错误,返回500错误状态码和错误信息。

插入操作示例

js 复制代码
// 插入新用户的路由
router.post('/users', async (req, res) => {
  try {
    const newUser = new User(req.body);
    await newUser.save();
    res.send(newUser);
  } catch (e) {
    console.error(e);
    res.status(400).send({ error: 'Bad Request' });
  }
});

对于POST /users路由,当客户端发送数据到这个路径时,会创建一个新的User对象(使用req.body中的数据),然后将其保存到数据库中。如果保存成功,将新用户数据发送回客户端;如果出现错误(如数据验证不通过),返回400错误状态码和错误信息。

更新操作示例

js 复制代码
// 更新用户信息的路由
router.put('/users/:id', async (req, res) => {
  try {
    const { id } = req.params;
    const updatedUser = await User.findByIdAndUpdate(id, req.body, {
      new: true
    });
    if (!updatedUser) {
      res.status(404).send({ error: 'User not found' });
    } else {
      res.send(updatedUser);
    }
  } catch (e) {
    console.error(e);
    res.status(500).send({ error: 'Internal Server Error' });
  }
});

PUT /users/:id路由中,:id是路由参数,表示要更新的用户的唯一标识符。通过req.params获取id,然后使用User.findByIdAndUpdate方法根据id找到用户并更新其信息(req.body包含更新的数据)。如果new: true选项被设置,会返回更新后的用户对象。如果找不到用户,返回404错误状态码和错误信息;如果出现其他错误,返回500错误状态码和错误信息。

删除操作示例

js 复制代码
// 删除用户的路由
router.delete('/users/:id', async (req, res) => {
  try {
    const { id } = req.params;
    const deletedUser = await User.findByIdAndDelete(id);
    if (!deletedUser) {
      res.status(404).send({ error: 'User not found' });
    } else {
      res.send({ message: 'User deleted successfully' });
    }
  } catch (e) {
    console.error(e);
    res.status(500).send({ error: 'Internal Server Error' });
  }
});

DELETE /users/:id路由中,同样通过req.params获取id,然后使用User.findByIdAndDelete方法根据id删除用户。如果找不到用户,返回404错误状态码和错误信息;如果删除成功,返回成功消息;如果出现其他错误,返回500错误状态码和错误信息。

相关推荐
Clockwiseee38 分钟前
docker学习
学习·docker·eureka
yqcoder1 小时前
NPM 包管理问题汇总
前端·npm·node.js
程序菜鸟营1 小时前
nvm安装详细教程(安装nvm、node、npm、cnpm、yarn及环境变量配置)
前端·npm·node.js
lozhyf1 小时前
Go语言-学习一
开发语言·学习·golang
中东大鹅1 小时前
MongoDB基本操作
数据库·分布式·mongodb·hbase
mascon2 小时前
U3D的.Net学习
学习
加德霍克2 小时前
【机器学习】使用scikit-learn中的KNN包实现对鸢尾花数据集或者自定义数据集的的预测
人工智能·python·学习·机器学习·作业
漂亮_大男孩2 小时前
深度学习|表示学习|卷积神经网络|局部链接是什么?|06
深度学习·学习·cnn
l1x1n02 小时前
No.37 笔记 | Python面向对象编程学习笔记:探索代码世界的奇妙之旅
笔记·python·学习
骇客野人2 小时前
【人工智能】循环神经网络学习
人工智能·rnn·学习