Итак, я натолкнулся на видео, используя multer и cloudinary, чтобы загрузить фотографии для публикации. Я пытался скопировать и реализовать в своем коде, но я получаю «MulterError: Неожиданное поле», не зная, почему мы как это исправить. Я пытаюсь дать пользователю возможность загрузить свое собственное изображение, и если это не так, сервер должен отобразить изображение по умолчанию.
**var express = require("express");
var router = express.Router();
var passport = require("passport");
var User = require("../models/user");
var Post = require("../models/post");
require('dotenv').config();
var multer = require('multer');
var storage = multer.diskStorage({
filename: function(req, file, callback) {
callback(null, file.originalname);
}
});
var imageFilter = function (req, file, cb) {
if (!file.originalname.match(/\.(jpg|jpeg|png|gif)$/i)) {
return cb(new Error('Only image files are allowed!'), false);
}
cb(null, true);
};
var upload = multer({storage: storage, fileFilter: imageFilter});
var cloudinary = require('cloudinary');
cloudinary.config({
cloud_name: 'dxshkwriz',
api_key: process.env.CLOUDINARY_API_KEY,
api_secret: process.env.CLOUDINARY_API_SECRET
});
//root route
router.get("/", function(req, res){
res.render("landing");
});
router.get('/home',function(req, res){
res.render('index')
});
router.get('/team', function(req, res){
res.render('team')
});
router.get('/give', function(req, res){
res.render('give')
});
router.post('/give', function(req, res){
res.redirect('/home')
});
// show register form
router.get("/register", function(req, res){
res.render("sign-up");
});
//handle sign up logic
router.post("/register", upload.single('image'), function(req, res){
cloudinary.v2.uploader.upload(req.file.path, function(result){
req.body.image = result.secure_url
})
var image = req.body.image ? req.body.image : "/Images/d-avatar.jpg";
var newUser = new User({
username: req.body.username,
firstName: req.body.firstName,
lastName: req.body.lastName,
description: req.body.description,
email: req.body.email,
location: req.body.location,
avatar: image
});
User.register(newUser, req.body.password, function(err, user){
if(err){
console.log(err);
// req.flash('error', err.message);
return res.render("sign-up");
};
passport.authenticate("local")(req, res, function(){
// req.flash('error', 'Welcome to our forums' + user.username);
res.redirect("/forums");
});
});
});
//show login form
router.get("/login", function(req, res){
res.render("login");
});
//handling login logic
router.post("/login", passport.authenticate("local",
{
successRedirect: "/forums",
failureRedirect: "/login"
}), function(req, res){
});
// logout route
router.get("/logout", function(req, res){
req.logout();
// req.flash('succes', 'Logged Out')
res.redirect("/forums");
});
router.get('/users/:id', function(req, res){
User.findById(req.params.id, function(err, foundUser){
if(err){
res.redirect('back')
} else {
Post.find().where('author.id').equals(foundUser._id).exec(function (err, posts){
if(err){
res.redirect('back');
} else {
res.render('user/show', {user:foundUser, posts: posts});
}
})
}
})
})
module.exports = router;**