node-multer:当没有要上载的文件时,表单提交失败

时间:2015-03-30 14:48:30

标签: node.js forms post express multer

下面的HTML表单(除其他外)使用express.js和multer将文件上传到服务器。如果选择了一个文件,它可以正常工作,但如果文件被遗漏则不行

<form id="uploadform" method="post" action="/upload" enctype="multipart/form-data">
    <p> Description: <input type="text" name="description"></p>
    <p><input type="file" name="img"></p>
    <p><input id="submit_upload" type="submit" value="Submit"></p>
</form>

我的Node.js应用程序包含中间件multer。

var express = require('express');
var app = express();
var multer = require('multer');

app.use(multer(
    {
        dest: './public/img/',
        rename: function (fieldname, filename) {
            return filename + Date.now();
        }
    }));

提交表单后,我将重定向到/upload,因为它在HTML-Upload表单中使用action="/upload"进行了定义。 在我的Node.js脚本中,表单条目将按如下所示进行处理:

app.post('/upload', function (req, res) {
    var form_description = req.body.description;
    var form_datei = JSON.stringify(req.files.img.name);
    form_datei = form_datei.substring(1, form_datei.length - 1);
    //  insert operations into database get placed here
    res.redirect('/');
});

如果我没有选择表单中的文件并仅使用插入的文本提交,则甚至不会提交文本。相反,我的控制台和浏览器窗口会显示一条很长的错误消息,如下所示:

TypeError: Cannot read property 'name' of undefined

如果没有选择文件,我如何提交表单? 文件上传应该是可选的。 谢谢你的帮助!

1 个答案:

答案 0 :(得分:3)

问题是当您尝试在req.files.img.name中检索图像名称时。由于req.files.img将返回undefined,因此您无法在那里阅读该属性。

在尝试使用文件之前检查文件是否已提交:

app.post('/upload', function (req, res) {
    var form_description = req.body.description;
    if(req.files.img) {
        var form_datei = JSON.stringify(req.files.img.name);
        form_datei = form_datei.substring(1, form_datei.length - 1);
        //  insert operations into database get placed here
    }
    res.redirect('/');
});