📌  相关文章
📜  使用 Mongoose 在 MongoDB 上上传和检索图像(1)

📅  最后修改于: 2023-12-03 15:22:14.437000             🧑  作者: Mango

使用 Mongoose 在 MongoDB 上上传和检索图像

简介

本文将介绍如何使用 Mongoose 和 MongoDB 实现图像的上传和检索功能。Mongoose 是一个基于 Node.js 的 MongoDB 对象模型工具,可以方便地操作 MongoDB 数据库。

安装

在开始之前,我们需要安装 Mongoose 和 Multer 这两个 Node.js 模块。

npm install mongoose multer
上传图片

在 Node.js 中,我们可以使用 Multer 中间件来处理图像的上传。Multer 会将上传的文件存储在指定的目录中。

在 Express 应用中,我们可以使用以下代码来配置 Multer 中间件:

const multer = require('multer');
const upload = multer({ dest: 'uploads/' });

在上面的代码中,我们将上传的图像存储在名为 uploads 的目录中。

接下来,我们需要为上传的图像创建一个 Mongoose 模型。以下是一个示例模型:

const mongoose = require('mongoose');
const { Schema } = mongoose;

const ImageSchema = new Schema({
  name: String,
  originalName: String,
  path: String,
  size: Number,
}, { timestamps: true });

const Image = mongoose.model('Image', ImageSchema);

module.exports = Image;

在模型中,我们定义了四个属性,分别表示:

  • name:文件名,由服务器自动生成。
  • originalName:原始文件名。
  • path:文件在服务器上存储的路径。
  • size:文件大小。

我们使用 mongoose.model 方法将模型注册到 Mongoose 中并导出它。

现在我们可以创建一个路由来处理图像的上传。以下是一个简单的示例:

const express = require('express');
const router = express.Router();
const Image = require('../models/image');

router.post('/upload', upload.single('image'), async (req, res) => {
  const { originalname, size, path } = req.file;
  const image = new Image({ originalName: originalname, size: size, path: path });
  await image.save();
  res.status(201).json({ message: 'Image uploaded successfully.' });
});

module.exports = router;

在上面的代码中,我们使用 multer 中间件的 single 方法来处理图像的上传,并将接收到的文件信息存储到 MongoDB 数据库中。

检索图片

现在我们可以通过访问数据库来检索上传的图像。以下是一个示例查询语句:

Image.find({}).sort({ createdAt: -1 }).limit(limit).skip(skip).exec();

在上面的代码中,我们使用 Mongoose 的 find 方法来查找所有的图像,然后使用 sort 方法对它们进行按日期降序排列,使用 limitskip 方法来分页显示。

以下是一个完整的示例路由:

router.get('/images', async (req, res) => {
  const { page, limit } = req.query;
  const skip = (page - 1) * limit;
  const images = await Image.find({}).sort({ createdAt: -1 }).limit(limit).skip(skip).exec();
  res.json(images);
});

在上面的代码中,我们使用 Express 的 req.query 方法来获取 URL 查询参数,然后使用这些参数来计算 skiplimit 值。最后,我们使用 Image.find 方法来检索图像,并将它们作为 JSON 数据返回。

结论

使用 Mongoose 和 Multer,我们可以方便地将图像上传到 MongoDB 数据库中,并提供基于 MongoDB 的检索功能。在实际应用中,我们可以根据需要对模型和路由进行微调来满足具体的需求。