【问题标题】:Image File Not Being Saved in MongoDB图像文件未保存在 MongoDB 中
【发布时间】:2021-05-05 15:48:48
【问题描述】:

我正在使用 MERN 技术创建一个新闻文章网络应用程序。

为此,我有以下 Mongoose 架构:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

let Article = new Schema({
    article_title: {
        type: String,
        required: true
    },
    article_summary: {
        type: String,
        required: true
    },
    article_content: {
        type: String,
        required: true
    },
    article_image: {
        type: String,
        required: true
    },
    article_reference: {
        type: String,
        required: true
    }
});

module.exports = mongoose.model('Article', Article);

还有以下 Express 服务器,我有一个发布方法,将上述信息作为“req.body”和“req.file”使用 Mongoose 和 Multer 保存在数据库中:

const multer = require('multer');
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const cors = require('cors');
const mongoose = require('mongoose');
const articleRoutes = express.Router();
const PORT = process.env.PORT || 4000;

let Article = require('./article.model');

app.use(cors());
app.use(bodyParser.json());

mongoose.connect('mongodb://127.0.0.1:27017/article', { useNewUrlParser: true, useUnifiedTopology: true });
const connection = mongoose.connection;

connection.once('open', function() {
    console.log("MongoDB database connection established successfully");
});

const storage = multer.diskStorage({
    destination: (req, file, cb) => {
        cb(null, "images");
    },
    filename: (req, file, cb) => {
        cb(null, Date.now() + "--" + file.originalname);
    }
});

const upload = multer({ storage: storage });

articleRoutes.route("/content-management-system/add").post(upload.single("article_image"), (req, res) => {
    console.log("START FROM HERE");
    const article = new Article({
        article_title: req.body.article_title,
        article_summary: req.body.article_summary,
        article_content: req.body.article_content,
        article_image: req.file.article_image,
        article_reference: req.body.article_reference
    });
    console.log(article);
    console.log(mongoose.connection.readyState);
    article
        .save()
        .then(() => {
            console.log("Saved successfully!");
            res.status(200).json({'article': 'article saved successfully'});
        })
        .catch(err => {
            console.log("Article save unsuccessful!");
            console.log("article: " + article);
            console.log(req.file);
            console.log(req.body);
            res.status(400).send('adding new article failed');
        });
});

但是,当我在 Postman 上传递一个发布请求时,它会失败并显示 400 错误,说“错误请求”。如您所见,在上面的代码中,我有许多 console.logs 显示了 req.filereq.bodyarticle 的值>。当我查看控制台时,它显示这些值不包括 article_image。下面是 console.logs 的照片:

对不起,对于许多代码示例,但大部分只是样板代码,问题很简单:为什么我的 article_image 文件,它用 Multer 保存在我的图像文件中,而不是保存在我的 MongoDB 上?

【问题讨论】:

    标签: mongodb express mongoose postman multer


    【解决方案1】:

    试试article_image: req.file.path 而不是article_image: req.file.article_image

    【讨论】:

    • 天哪,非常感谢!与我写的相比,这有什么原因吗?
    • req.file 是对象,你想访问article_image,req.file 中没有这个字段,你应该将图像的路径存储在数据库中,文件上传的路径在@ 987654324@
    • 对,这是有道理的。这真的很奇怪,因为网上很多例子都显示“req.file.filename”而不是“req.file.path”。谢谢
    • 当你想显示图片使用时,你应该从文件中读取图片,如果你有一个文件夹来存储图片,你可以使用文件名,但是如果你将图片存储在不同的文件夹中,例如, images/user/1.jpeg 或 images/profile/1.jpeg 用于访问此图像,它更好地存储路径
    • 是的,你可以,但是当你想阅读图像时,你应该这样尝试:文件夹路径+ article_image
    猜你喜欢
    • 2018-08-11
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 2016-04-06
    相关资源
    最近更新 更多