node.js - Express Multer 在上传前验证字段
问题描述
我已经看到了:NodeJS Multer 在上传之前验证字段但不起作用。我在几天内上传之前尝试了 make validate 字段,但结果不起作用。是因为 mutler 做不到吗?
我正在使用 MERN:MongoDB、React、Express、Node
我想在上传图像之前在 Form-data : dataMurid 中验证这些数据。还有其他方法可以克服吗?也许使用其他库?请给我示例代码。
路线
// @route buat edit/create murid baru
router.post('/datasiswa/create',(req, res,next) => {
upload(req,res,(err)=>{
let request = JSON.parse(req.body.newMurid);
// upload(req.body.data.data, res, (err) => {
// console.log(req.body.data.data);
// });
const { errors, isValid } = validateMuridInput(request);
// Check validation
if (!isValid) {
return res.status(400).json(errors);
}
const muridFields = {};
if (request.tempatLahir) muridFields.tempatLahir = request.tempatLahir;
if (request.jenisKelamin) muridFields.jenisKelamin = request.jenisKelamin;
if (request.nis) muridFields.nis = request.nis;
if (request.nama) muridFields.nama = request.nama;
if (request.tanggalLahir) muridFields.tanggalLahir = request.tanggalLahir;
if (request.namaAyah) muridFields.namaAyah = request.namaAyah;
if (request.namaIbu) muridFields.namaIbu = request.namaIbu;
if (request.noTelepon) muridFields.noTelepon = request.noTelepon;
if (request.hpSiswa) muridFields.hpSiswa = request.hpSiswa;
if (request.hpIbu) muridFields.hpIbu = request.hpIbu;
if (request.hpAyah) muridFields.hpAyah = request.hpAyah;
if (request.alamat) muridFields.alamat = request.alamat;
Murid.findOne({ nis: request.nis })
.then((murid) => {
if (murid) {
errors.nis = 'NIS ini sudah terdaftar';
return res.status(400).json(errors);
} else {
const newMurid = new Murid(muridFields);
newMurid.save()
.then((murid) => {
res.json(murid);
})
.catch((err) => {
console.log(err);
});
}
})
});
});
上传功能
const multer = require('multer');
const path = require('path');
// UPLOAD IMAGE
// Set Storage engine
const storage = multer.diskStorage({
destination: './public/uploads/',
filename: function (req, file, callback) {
callback(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname));
}
});
// Init upload
let upload = multer({
storage: storage,
limits:{fileSize:1000000}, //file size dalam bit
}).fields([{ name: 'fotoDisplay' }, { name: 'newMurid' }]);
解决方案
使用 multer,在您的 req.file 中,您拥有有关该文件的所有字段。
var multer = require('multer')
var upload = multer({ dest: 'uploads/' })
import fs from 'fs-extra'
router.post('/register', upload.single('avatar'), (req, res, next) => {
return fs.readFile(req.file.path)
.then(content => {
// The content of the file
})
}
req.file 具有 mimetype 以及更多您可以检查的内容
推荐阅读
- java - 如何使用多线程向队列添加唯一值?
- jquery - 未捕获的 TypeError:Object.defineProperty 在 Heroku 上的非对象上调用
- java - JOGL 空白屏幕
- count - 计算合并的观测值并计算分数
- c# - 在调用 DbContext.SaveChanges() 时立即接收保存的项目
- docker - 挂载错误(13):权限被拒绝 - 在 docker/kubernetes
- python - 如何在python中将数据模拟为request.Response类型
- shell - 如果在执行“sed -i --”时出错会发生什么情况,这是文件的更改
- highcharts - HighCharts navigator: how to disable the expand width icon on hover
- python - ggplot 到 R - 数据框 R