【问题标题】:not updating if file is not selected in nodejs using multer如果未使用 multer 在 nodejs 中选择文件,则不更新
【发布时间】:2022-01-22 19:20:05
【问题描述】:

我正在尝试更新数据。如果我选择文件,它工作正常,但是当我只想更新除文件输入类型之外的任何字段时会出现问题。在这种情况下我无法更新。 我该如何解决?

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



var upload = multer({ 
storage:storage,
});


app.post('/editProfile', auth, upload.single('image'), async (req, res, next) => {
try {
    const userEmail = req.user.email;
    const name = req.body.name;
    const filename = req.file.filename;
    const contact = req.body.contact;
    console.log(filename + "fghj");
    if(filename) {
    const edited = await User.updateOne({ 'email': userEmail }, {
        $set: {
            name: name,
            contact: contact,
            filename:filename
            }
        });
    }
    else {
        const edited = await User.updateOne({ 'email': userEmail }, {
            $set: {
                name: name,
                contact: contact,
                }
            });
    }
    res.redirect('profile');
}
catch (e) {
    console.log(`while edit profile ${e}`);
    res.status(400).send(e);
}
})

【问题讨论】:

    标签: node.js mongodb express mongoose multer


    【解决方案1】:

    您正在尝试获取filename,但请记住您没有在您的场景中发送文件。这里:

    const filename = req.file.filename;
    

    首先,你应该检查一个文件是否存在。

    你可以这样修改你的代码:

    app.post('/editProfile', auth, upload.single('image'), async (req, res, next) => {
        try {
            const userEmail = req.user.email;
            const name = req.body.name;
            // const filename = req.file.filename; Remove this line from here
    
            const contact = req.body.contact;
    
            if (req.file) {
                const filename = req.file.filename // And, use that code when you make sure that you have a file
                const edited = await User.updateOne({ 'email': userEmail }, {
                    $set: {
                        name: name,
                        contact: contact,
                        filename: filename
                    }
                });
            }
            else {
                const edited = await User.updateOne({ 'email': userEmail }, {
                    $set: {
                        name: name,
                        contact: contact,
                    }
                });
            }
            res.redirect('profile');
        }
        catch (e) {
            console.log(`while edit profile ${e}`);
            res.status(400).send(e);
        }
    })
    

    【讨论】:

    • 还是不行。得到同样的错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 2014-11-30
    • 2012-10-12
    • 1970-01-01
    • 2020-12-30
    相关资源
    最近更新 更多