2

以下のこの 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 アップロード フォームで で定義されているように、にリダイレクトされます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

ファイルが選択されていない場合にフォームを送信する にはどうすればよいですか? ファイルのアップロードはオプションである必要があります。 ご協力いただきありがとうございます!

4

1 に答える 1

5

問題は、 でイメージ名を取得しようとしたときですreq.files.img.namereq.files.imgwill が返されるため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('/');
});
于 2015-03-30T15:25:53.923 に答える