如果未使用 multer 在 nodejs 中选择文件,则不更新

Posted

技术标签:

【中文标题】如果未使用 multer 在 nodejs 中选择文件,则不更新【英文标题】:not updating if file is not selected in nodejs using multer 【发布时间】: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);

)

【问题讨论】:

【参考方案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);
    
)

【讨论】:

还是不行。得到同样的错误

以上是关于如果未使用 multer 在 nodejs 中选择文件,则不更新的主要内容,如果未能解决你的问题,请参考以下文章

如何在nodejs中使用sharp调整图像大小然后使用multer上传

如何在nodejs中使用sharp调整图像大小然后使用multer上传

nodejs + multer + angularjs 无需重定向即可上传

nodejs multer diskstorage在保存到磁盘后删除文件

如何在nodejs的控制器内调用multer中间件?

NodeJS Multer 不工作