Я использую 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>
Любая помощь будет принята с благодарностью