2017-08-17 13 views
0

Multerを使用している私のExpressアプリケーションでは、ファイルが含まれている場合と含まれていない可能性があるフォームデータを受け取り、処理する必要があります。このフォームデータには、例えば、データベースに追加したい名前のような他のデータが含まれています画像が添付されているかどうかはですか。Multerによって検出されたイメージがない場合、Express.jsでリクエストを処理し続けることはできますか?

app.js(ノード/エクスプレス/ Multer)

app.post 
(
    '/create_item', 
    multer({dest : 'temp/'}).single('image'), 
    function(req, res, next) 
    { 
     // I want to do stuff here with the req.body, 
     // even if there wasn't a file attached for Multer to process. 
     // As of now, it just shuts down the request when there is no file. 

     // When there is an image attached there is no problem. 
    } 
) 

ので、Multerは、添付ファイルが存在しない場合は、要求を継続できるようにしていないようです。 Multerが何かをするための画像が添付されていなくても、サーバ上で作業を続ける方法はありますか?

解決策を見つけるために多くの研究と考えをしましたが、悲しいことに、解決策を見つけることができませんでした。あなたが私を助けることができれば、それは非常に高く評価されるでしょう!

+1

多分、あなたのバージョンのmulterを更新する必要があります。私は自分のコンピュータ上でコードを実行し、それは働いた。あるいは、以下の私の答えを使用してください。 – OwChallie

+0

私のバージョンはうまくいきますが、あなたはおそらくこのコメントの中で正しいでしょう。私はこれが特定のページ(クライアント側)からリクエストを送信する場合にのみ発生することを発見しました。それはおそらく、フォームデータを妨害するジャバスクリプトのページで、ちょうど「ちょうど」ちょっとしたバールです:server-side/Multerは問題ありません。ありがとう、私はおそらくそれが不可能であったことを教えた。 –

答えて

0

おそらく少し厄介な回避策ですが、これを試してみてください。ファイルが通過するかどうかを検出する独自のミドルウェアを作成します。ファイルが通過している場合は、mutterを使用し、それ以外の場合はバイパスします。

app.post 
(
    '/create_item', 
    function(req, res, next) { 
     req.rawBody.indexOf('filename=') === -1 ? next() : multer({dest : 'temp/'}).single('image')(req, res, next); 
    }, 
    function(req, res, next) 
    { 
     // I want to do stuff here with the req.body, 
     // even if there wasn't a file attached for Multer to process. 
     // As of now, it just shuts down the request when there is no file. 

     // When there is an image attached there is no problem. 
    } 
) 
関連する問題