在 Node JS 中发送数据而不发送文件

问题描述 投票:0回答:1

我创建了一个 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>

首先,我尝试在 update.ejs 文件中修复此问题。但后来我意识到我可能必须在index.js 中修复这个问题。

非常感谢任何帮助。

node.js express multer
1个回答
0
投票

目前,代码假设

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>');
});
© www.soinside.com 2019 - 2024. All rights reserved.