如何在 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>

在我看来,添加当没有通过 if() 选择文件时的流程

首先我尝试修复 update.ejs 文件输入部分,

但我意识到也许我必须做的是修复index.js

请给我一些建议。

node.js express multer node.js-fs
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.