图像文件未保存在 MongoDB
Image File Not Being Saved in MongoDB
我正在使用 MERN 技术创建新闻文章 Web 应用程序。
为此,我有以下猫鼬模式:
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 服务器,我有一个 post 方法,上面的信息作为“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 上传递 post 请求时,它失败并显示 400 错误“错误请求”。如您所见,在上面的代码中,我有许多 console.logs 显示 req.file 和 req.body[ 的值=32=] 和 文章。当我查看我的控制台时,它显示这些值不包括 article_image。下面是 console.logs:
的照片
抱歉,对于许多代码示例,但大部分只是样板代码,问题很简单:为什么我的 article_image 文件,它正在使用 Multer 保存在我的图像文件中,而不是保存在我的 MongoDB?
只需尝试 article_image: req.file.path
而不是 article_image: req.file.article_image
我正在使用 MERN 技术创建新闻文章 Web 应用程序。
为此,我有以下猫鼬模式:
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 服务器,我有一个 post 方法,上面的信息作为“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 上传递 post 请求时,它失败并显示 400 错误“错误请求”。如您所见,在上面的代码中,我有许多 console.logs 显示 req.file 和 req.body[ 的值=32=] 和 文章。当我查看我的控制台时,它显示这些值不包括 article_image。下面是 console.logs:
的照片抱歉,对于许多代码示例,但大部分只是样板代码,问题很简单:为什么我的 article_image 文件,它正在使用 Multer 保存在我的图像文件中,而不是保存在我的 MongoDB?
只需尝试 article_image: req.file.path
而不是 article_image: req.file.article_image