现在我尝试开发 Node JS 应用程序来上传文件和数据。 我上传和下载文件成功,但问题是我想根据选项上传文件。 但我发送数据而不上传文件,
我得到了类型错误:无法读取未定义的属性(读取“文件名”) 我用 multer 发送文件,然后用 res.download() 下载
如何在不发送文件的情况下发送数据?
这是我的上传代码:
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);
}
res.send('<script>window.close()</script>')
})
这是我的输入文件代码:
更新.ejs
<form id="update" name="update" action="/update" method="post" enctype="multipart/form-data">
<table border="1">
<input id="a_seq" name="a_seq" value="<%=result_data[id]['A_SEQ']%>" hidden>
<tr >
<th scope="row">Q_name</th>
<td>
<input id="input_user" name="input_user" class="input" value="<%=result_data[id]['INPUT_USER']%>" >
</td>
</tr>
<tr>
<th scope="row">Q_mail</th>
<td>
<input id="input_email" name="input_email" class="input" value="<%=result_data[id]['INPUT_EMAIL']%>" >
</td>
</tr>
<tr>
<th scope="row">Q_ID</th>
<td>
<input id="acpt_id" name="acpt_id" class="input" value="<%=result_data[id]['ACPT_ID']%>">
</td>
</tr>
<tr style="height: 200px;">
<th scope="row">ask_memo</th>
<td>
<textarea id="acpt_memo" name="acpt_memo" class="input" value="<%=result_data[id][''][0]%>" style="height: 200px;" size="100"><%=result_data[id][''][0]%></textarea>
</td>
</tr>
<tr style="height: 200px;">
<th scope="row">memo</th>
<td>
<textarea id="acpt_r_memo" name="acpt_r_memo" class="input" value="<%=result_data[id][''][1]%>" style="height: 200px;" size="100"><%=result_data[id][''][1]%></textarea>
</td>
</tr>
<tr>
<th scope="row">file</th>
<td>
<input type="file" id="file" name="file" value="<%=result_data[id]['FILE_SERVER']%>" class="input"/>
</td>
</tr>
</form>
在我看来,添加当没有通过 if() 选择文件时的流程
首先我尝试修复 update.ejs 文件输入部分,
但我意识到也许我必须做的是修复index.js
请给我一些建议。
目前,代码假设
req.file
始终被定义。所以如果没有文件,req.file.filename
就会导致TypeError
。
您可以通过检查
req.file
是否存在来修改代码。如果存在,您可以读取它的属性。否则您可以将其设置为''
。
app.post('/update', upload.single('file'), async (req, res) => {
console.log(req.body);
console.log(req.file);
// Check if req.file exists
const file_server = req.file ? req.file.filename : '';
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;
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).send(err.message);
}
res.send('<script>window.close()</script>');
});