Настройка загрузки картинки профиля для пользователя - PullRequest
0 голосов
/ 25 марта 2020

Итак, я натолкнулся на видео, используя 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;**
...