【问题标题】:how to save an user profile picture in nodejs (upload an image in mongodb with nodejs)如何在nodejs中保存用户个人资料图片(使用nodejs在mongodb中上传图片)
【发布时间】:2021-03-22 16:10:15
【问题描述】:

我正在构建一个带有用户配置文件更新的 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)
    }
}

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

【问题讨论】:

    标签: node.js mongodb express mongoose multer


    【解决方案1】:

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

    userOld 未定义对吗?

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

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

    你使用 multer 吗?

    【讨论】:

    • 我尝试使用 multer,但我不知道在我的情况下使用它的正确方法
    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多