如果没有上传图像,如何将默认图像放入 multer?
Posted
技术标签:
【中文标题】如果没有上传图像,如何将默认图像放入 multer?【英文标题】:How can you put a default image in multer if no image is uploaded? 【发布时间】:2021-10-23 22:59:34 【问题描述】:我正在尝试设置 multer,但图像出现了一些问题,目前,当我不上传任何图像时,服务器会给我一个错误,不允许我继续。我希望即使图像未上传,仍将值存储在数据库中。
这是我配置 multer 的地方:
const express = require('express');
const router = express.Router();
const multer = require('multer');
const Clients = require('../models/clients.js')
const storage = multer.diskStorage(
destination: (req, file, callback) =>
callback(null, "../emaildragger/public/uploads")
,
filename: (req, file, callback) =>
callback(null, file.originalname)
)
const upload = multer(storage: storage)
router.route('/').get((req, res) =>
Clients.find()
.then(client => res.json(client))
.catch(err => res.status(400).json('Error:' + err))
)
router.route('/:id').get((req, res) =>
Clients.findById(req.params.id)
.then(client => res.json(client))
.catch(err => res.status(400).json("Error" + err))
)
router.route('/add').post(upload.single("image"), (req, res) =>
const newClient = new Clients(
image: req.file.originalname,
firstName: req.body.firstName,
lastName: req.body.lastName,
weight: req.body.weight,
BMI: req.body.BMI
)
newClient.save()
.then (() => res.json(newClient))
.catch(err => res.status(400).json('error' + err))
)
module.exports = router
这是我的模型:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var clientsSchema = new Schema(
image:
type: String, required: false, default: 'Screenshot_293.png',
firstName: type: String, required: true ,
lastName: type: String, required: true ,
weight: type: String, required: false ,
BMI: type: String, required: false
);
const Clients = mongoose.model("clients", clientsSchema)
module.exports = Clients
【问题讨论】:
你能把错误添加到问题中吗? 没有错误,只是没有任何反应 但是你有问题说服务器给你一个错误,不允许你继续。POST http://localhost:4000/clients/add 500 (Internal Server Error)
这是错误
【参考方案1】:
错误出现在您的服务器中,因为您添加了Multer
作为中间件,稍后在您的控制器中您尝试访问上传文件的originalname
。如果您没有发送图片,那么Multer
将不会解析并上传,文件将不存在。在这种情况下,您将尝试访问不存在的东西的 originalname
属性,因此您的服务器将抛出错误。
尝试像这样更改您的代码:
router.route('/add').post(upload.single("image"), (req, res) =>
let client =
firstName: req.body.firstName,
lastName: req.body.lastName,
weight: req.body.weight,
BMI: req.body.BMI
if(req.file && req.file.originalname) client.image = req.file.originalname;
const newClient = new Clients(client)
newClient.save()
.then (() => res.json(newClient))
.catch(err => res.status(400).json('error' + err))
)
【讨论】:
以上是关于如果没有上传图像,如何将默认图像放入 multer?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 multer 和 NodeJS 将图像上传到 GCS 存储桶?
如何在节点中使用 multer 将图像上传到 cloudinary 并与其他数据一起表达
如何在nodejs中使用sharp调整图像大小然后使用multer上传