如何在 nodejs 中保存用户个人资料图片(使用 nodejs 在 mongodb 中上传图片)

时间:2021-03-20 20:01:04

标签: node.js mongodb express mongoose multer

我正在构建一个带有用户配置文件更新的 Nodejs 应用程序。除图像外,所有用户信息均完美更新。我无法在本地或数据库中保存图像。有人可以帮我解决这个问题吗? 这是我的代码 对于控制器

const {createUser, getUserPerUsername, searchUsersPerUsername, addUserIdToCurrentUserFollowing,
     removeUserIdToCurrentUserFollowing, findUserPerId, updateUser, deleteUser} = require('../queries/users.queries')
const request = require('request')
const directoryUploads = require('../path').directoryUploads
const path = require('path')
const fs = require('fs')
const upload = require('../Middleware/upload')

exports.userUpdate = async (req, res, next ) => {
    const userId = req.params.userId
    const user = await findUserPerId(userId)
    const body = req.body
    
    try {
        if(user) {
            let picture = req.files['picture'] ? req.files['picture'][0].filename : null
            console.log("Picture : " +picture)
            const user = await findUserPerId(userId)
            console.log("User Old : " + user)
  
            if (userOld.picture) {
                if (picture) {
                    const pathImagePreview = path.join(directoryUploads, 'uploads/') + user.picture
                    fs.exists(pathImagePreview, exists => {
                        if (exists)
                            fs.unlinkSync(pathImagePreview)
                    })
                } else {
                    picture = user.picture
                }
            }
                const userUptd = await updateUser(userId, {
                firstname: body.firstname,
                lastname: body.lastname,
                "local.email": body.email,
                phones: body.phones,
                picture: body.picture
            })
            console.log("Image uploaded successfully !!")
            req.flash('success', [`User ${userUptd.username} updated!`])
            res.redirect('/users/profile') 
        } else {
            throw new Error('Please make sure to fill in the fields correctly!')
        }
    } catch (error) {
        console.log(error)
        req.flash('errors', [error.message])
        req.flash('body', body)
    }
}

这里的图片指的是输入类型=“文件”的名称。 返回的错误是“无法读取未定义的属性‘图片’”。我认为它可能与文件检索有关

1 个答案:

答案 0 :(得分:0)

我认为您有一个未声明的变量:

userOld 未定义对吗?

还有这条线从未使用过,所以我不确定你是否真的处理了上传:

const upload = require('../Middleware/upload')

你使用multer吗?

相关问题