无法使用multer存储图像并无法存储mongodb数据库的路径

时间:2020-03-06 12:03:34

标签: rest api express mongoose multer

我正在尝试使用 multer 将图像存储在/public/uploads的本地文件夹中,并将图像存储在 mongodb 数据库中。我在用猫鼬。

const storage = multer.diskStorage({
    destination: '../public/uploads/',
    filename: function(req,file,cb){
        cb(null,file.fieldname+'-'+Date.now()+path.extname(file.originalname))
    }
});

//init upload variable 
const upload = multer({
    storage: storage
})

我猜想upload.single('dp')是一个返回我的文件对象的中间件,并且我能够在我的authController.signup函数中使用它。

router.post("/signup",upload.single('dp'),authController.signup)

authController.signup函数

 //fields in user collection 
    var email = req.body.email;
    var password = req.body.password;
    var method = req.body.method;
    var role = req.body.role;
    var googleId = req.body.googleId
    var facebookId = req.body.facebookId
    //fields in profile collection 
    var name = req.body.name 
    var pno = req.body.pno 
    var age = req.body.age 
    var gender = req.body.gender 
    var dob = req.body.dob 
    console.log(req.file)


    switch(method){
        case "local":
            var dp = `loacalhost/images/${req.file.filename}` // This has to be changed to store the image url 
            try{
                var data = await User.findOne({email: email})
                if(data){
                    return res.status(401).json({error: "Email already exists"})
                }
                var pData = await Profile.findOne({pno: pno})
                if(pData){
                    return res.status(401).json({error: "Phone number already exists"})
                }
                //encripting user password 
                const hashedPassword = await bcrypt.hash(password,12)
                //creating user collection 
                var user = new User()
                user.method.local = true
                user.role = role
                user.email = email 
                user.password = hashedPassword
                user.isVerified = false
                await user.save() //saving user collection 
                //creating profile collectiion 
                var profile = new Profile()
                profile.name = name 
                profile.pno=pno 
                profile.age =age 
                profile.gender = gender 
                profile.dob = dob 
                profile.dp = dp 
                profile.user = user._id
                await profile.save() //saving profile collection 

                //Email Verification to be sent===========///
                const emailCode = new Code()
                emailCode.email = email 
                const hashedEmail = await bcrypt.hash(email,12)
                emailCode.code = hashedEmail
                await emailCode.save()
                await mail.sendMail(hashedEmail)
                //=========================================//

                const response = {
                    name: name,
                    role: role,
                    email: email,
                    isVerified: user.isVerified,
                }
                return res.status(200).json(response)
            }catch(err){
                res.status(404).json(err)
            }
            break
        case "google":
            var dp = req.body.dp 
            try{
                var data = await User.findOne({email: email})
                if(data){
                    return res.status(401).json({error: "Email already exists"})
                }
                var pData = await Profile.findOne({pno: pno})
                if(pData){
                    return res.status(401).json({error: "Phone number already exists"})
                }
                //creating user collection 
                var user = new User()
                user.method.google = true
                user.role = null
                user.email = email 
                user.isVerified = true
                user.googleId = googleId
                await user.save() //saving the user collection
                //creating profile collectiion 
                var profile = new Profile()
                profile.name = name 
                profile.pno=pno 
                profile.age =age 
                profile.gender = gender 
                profile.dob = dob 
                profile.dp = dp 
                profile.user = user._id
                await profile.save() //saving profile collection 
                const response = {
                    name: name,
                    role: role,
                    email: email,
                    isVerified: user.isVerified,
                }
                return res.status(200).json(response)
            }catch(err){
                return res.status(404).json(err)
            }
            break
        case "facebook":
            var dp = req.body.dp 
            try{
                var data = await User.findOne({email: email})
                if(data){
                    return res.status(401).json({error: "Email already exists"})
                }
                var pData = await Profile.findOne({pno: pno})
                if(pData){
                    return res.status(401).json({error: "Phone number already exists"})
                }
                //creating user collection 
                var user = new User()
                user.method.google = true
                user.role = null
                user.email = email 
                user.isVerified = true
                user.facebookId = facebookId
                await user.save() //saving the user collection
                //creating profile collectiion 
                var profile = new Profile()
                profile.name = name 
                profile.pno=pno 
                profile.age =age 
                profile.gender = gender 
                profile.dob = dob 
                profile.dp = dp 
                profile.user = user._id
            }catch(err){
                return res.status(404).json(err)
            }
            break
    }

问题

当我使用邮递员检查路线时,已将每个数据输入数据库,即使图像路径正确,也位于dp字段中,但图像未上传到文件夹中,并且我的服务器抛出数据已经存在的错误。即使我删除了mongodb数据库内部的所有数据,此错误也正在出现。


我的想法

我不确定,但是我认为即使在将整个数据上传到文件夹中之前,我的控制器功能也已启动。这将迫使上载功能完成,然后再次进入控制器功能,并再次尝试写入数据库并出现该错误。


0 个答案:

没有答案