Возникла проблема при использовании Multer с Node - PullRequest
0 голосов
/ 13 июля 2020

Я использую multer и cloudinary в своем проекте для загрузки нескольких файлов, которые являются изображениями, используя форму вместе с некоторыми другими данными. Другие мои области работают отлично. Но когда я отправляю, я получаю сообщение об ошибке:

Unexpected field
MulterError: Unexpected field
    at wrappedFileFilter (C:\Users\Faizan\Desktop\surf-shop\node_modules\multer\index.js:40:19)
    at Busboy.<anonymous> (C:\Users\Faizan\Desktop\surf-shop\node_modules\multer\lib\make-middleware.js:114:7)
    at Busboy.emit (events.js:209:13)
    at Busboy.emit (C:\Users\Faizan\Desktop\surf-shop\node_modules\busboy\lib\main.js:38:33)
    at PartStream.<anonymous> (C:\Users\Faizan\Desktop\surf-shop\node_modules\busboy\lib\types\multipart.js:213:13)
    at PartStream.emit (events.js:209:13)
    at HeaderParser.<anonymous> (C:\Users\Faizan\Desktop\surf-shop\node_modules\dicer\lib\Dicer.js:51:16)
    at HeaderParser.emit (events.js:209:13)
    at HeaderParser._finish (C:\Users\Faizan\Desktop\surf-shop\node_modules\dicer\lib\HeaderParser.js:68:8)
    at SBMH.<anonymous> (C:\Users\Faizan\Desktop\surf-shop\node_modules\dicer\lib\HeaderParser.js:40:12)
    at SBMH.emit (events.js:209:13)
    at SBMH._sbmh_feed (C:\Users\Faizan\Desktop\surf-shop\node_modules\streamsearch\lib\sbmh.js:159:14)
    at SBMH.push (C:\Users\Faizan\Desktop\surf-shop\node_modules\streamsearch\lib\sbmh.js:56:14)
    at HeaderParser.push (C:\Users\Faizan\Desktop\surf-shop\node_modules\dicer\lib\HeaderParser.js:46:19)
    at Dicer._oninfo (C:\Users\Faizan\Desktop\surf-shop\node_modules\dicer\lib\Dicer.js:197:25)
    at SBMH.<anonymous> (C:\Users\Faizan\Desktop\surf-shop\node_modules\dicer\lib\Dicer.js:127:10)

Я не могу понять, что я сделал не так.

Вот мой код:

Routes / сообщений. js

const express = require('express');
const router = express.Router();
const multer = require('multer');
const upload = multer({ 'dest': 'uploads/' });
const { asyncErrorHandler } = require('../middleware')
const { postIndex, postNew, postCreate, postShow, postEdit, postUpdate, postDelete } = require('../controllers/posts')

// POSTS INDEX ROUTE
router.get('/', asyncErrorHandler(postIndex))
    
// POSTS NEW ROUTE
router.get('/new', postNew)

// POSTS CREATE ROUTE
router.post('/', upload.array('images', 4), asyncErrorHandler(postCreate))

// POSTS SHOW ROUTE
router.get('/:id', asyncErrorHandler(postShow))

// POSTS EDIT ROUTE
router.get('/:id/edit', asyncErrorHandler(postEdit))

// POSTS UPDATE ROUTE
router.put('/:id', asyncErrorHandler(postUpdate));

    // POSTS DELETE ROUTE
    router.delete('/:id', asyncErrorHandler(postDelete));
    
    module.exports = router
    

контроллеров. / post. js

        const Post = require('../models/post');
    const cloudinary = require('cloudinary');
    cloudinary.config({
        cloud_name: 'faizan3165',
        api_key: '737957886688111',
        api_secret: process.env.CLOUDINARY_SECRET
    });
    
            /* CREATE A POST */
        async postCreate(req, res, next) {
            req.body.posts.images = [];
            for (const file of req.files) {
                let image = cloudinary.v2.uploader.upload(file.path);
                req.body.posts.images.push({
                    url: image.secure_url,
                    public_id: image.public_id
                });
            }
            let post = await Post.create(req.body.post);
            res.redirect(`/posts/${post.id}`);
        },

просмотров / сообщений / new.e js

<div>
    <input type="file" name="post[images]" accept="images/*" multiple>
</div>

<div>
    <textarea name="post[description]" placeholder="Description"></textarea>
</div>

<div>
    <input type="text" placeholder="Location" name="post[location]">
</div>

<div>            
    <input type="submit">
</div>   
    

Любая помощь будет принята с благодарностью

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...