2017-12-20 7 views
0

一貫していませんが、時々Can't set headers after they are sentというエラーが表示されます。通常、私は同時にデータベースから多くのイメージをロードしようとしています。エクスプレスでのルーティングの問題(ヘッダーは既に設定されています)

Expressは、ルータの取得機能が呼び出される前に404が送信されているようです。ここにルータ機能があります:

router.get('/:imageId', formparser, function (req, res) { 
    imageStorage.fetch(req.params.imageId).then(function (img) { 
    console.log(res._headerSent); 
    if (img) { 
     res.contentType(img.contentType); 
     res.send(img.data); 
    } else 
     res.status(404).send(); 
    }); 
}); 


module.exports = router; 

何が原因である可能性がありますか?

詳細情報:私は実装に失敗した配線には手間がかかるかもしれないと思います。私は5異なるRouter秒を使用しています、そして、彼らはそうのようなexpressアプリに追加されます:

app.use('/images', require('./routes/imageroutes')); 
app.use('/course', require('./routes/courseroutes')); 
app.use('/user', require('./routes/userroutes')); 
app.use('/class', require('./routes/classroutes')); 
app.use('/responses', require('./routes/responsesroutes')); 

ポインタをいただければ幸いです。

formparser.jsミドルウェア:

'use strict'; 

const formidable = require('formidable'); 

function parse(opts) { 
    const form = new formidable.IncomingForm(); 
    form.multiples = true; 
    Object.assign(form, opts); 

    return (req, res, next) => { 
    var fields = {}; 
    var files = {}; 
    form.parse(req, function (err, _fields, files) { fields = _fields; }); 
    form.onPart = function (part) { 
     if (!part.filename) { 
     // let formidable handle all non-file parts 
     form.handlePart(part); 
     } else { 
     var file = { mime: part.mime, filename: part.filename, buffer: null }; 
     var chunks = []; 
     part.on('data', function (chunk) { 
      chunks.push(chunk); 
     }); 
     part.on('end', function() { 
      file.buffer = Buffer.concat(chunks); // merge all the chunks to a single buffer 
      chunks = null; 
     }) 
     files[part.name] = file; 
     } 
    }; 
    form.on('end', function() { 
     Object.assign(req, { fields, files }); 
     next(); 
    }); 
    }; 
} 

module.exports = parse; 
exports.parse = parse; // backword compatibility 
+1

おそらく、ミドルウェアで起こっていることです。それはエラー(または何か)を送信し、何かをもう一度送信しようとするあなたのルートに続いて、エラーをスローします。 – alizahid

+0

私はそう思っていましたが、使用しているミドルウェアのどれもが404を投げることはできないと思います:私は 'router.get'の下で' cookie-session'と 'express-formidable'(ここではformparser) – TastySpaceApple

+1

を使用します。 'module.exports = router;'を持っていますか? – mast3rd3mon

答えて

関連する問題