如果未使用 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 无需重定向即可上传