首页 > 解决方案 > 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' }]);

标签: node.jsreactjsexpress

解决方案


使用 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 以及更多您可以检查的内容


推荐阅读