Node.js可选文件上传:解决无文件提交TypeError报错问题
修复Node.js中multer可选文件上传时的TypeError问题
问题根源在于未上传文件时,req.file的值为undefined,直接访问req.file.filename会触发Cannot read properties of undefined (reading 'filename')错误。只需修改获取文件名的逻辑,先判断req.file是否存在即可。
解决方案
将原代码中获取文件名的行:
const file_server = req.file.filename || '';
替换为以下两种方式之一:
方式1:使用可选链操作符(ES2020+支持)
const file_server = req.file?.filename || '';
方式2:使用条件判断
const file_server = req.file ? req.file.filename : '';
修改后的完整index.js代码
app.post('/update',upload.single('file'), async(req,res) => { console.log(req.body) console.log(req.file) const a_seq_s = req.body.a_seq; const input_user_s = req.body.input_user; const input_email_s = req.body.input_email; const acpt_id_s = req.body.acpt_id; const acpt_memo_s = req.body.acpt_memo; const acpt_r_memo_s = req.body.acpt_r_memo; // 修复获取文件名的逻辑 const file_server = req.file?.filename || ''; try{ const query = await pool; const result = await query.request() .input('A_SEQ',a_seq_s) .input('INPUT_USER', input_user_s) .input('INPUT_EMAIL',input_email_s) .input('ACPT_ID',acpt_id_s) .input('ACPT_MEMO',acpt_memo_s) .input('ACPT_R_MEMO',acpt_r_memo_s) .input('FILE_NAME',file_server || '') .execute("USP_TS_M_S_Nodejs") } catch(err){ res.status(500); res.send(err.message); return; // 避免错误后继续执行后续代码,防止重复响应 } res.send('<script>window.close()</script>') })
补充说明:multer的upload.single('file')本身支持可选文件上传,无需修改中间件配置,只需处理好req.file可能为undefined的边界情况即可。
内容的提问来源于stack exchange,提问作者kj0511y
相关产品推荐
相关产品推荐

