0

multerエクスプレス全体にアタッチする代わりにapp、特定のルートだけに含めるようにしています。これは、すべてのルート処理へのアップロードを防ぐため、より優れていますpost

問題は、ルート内でプロパティを設定できないことです。

var router = require('express').Router(),
multer = require('multer');

router.post('/uploads', function (req, res, next) {
   multer({
     dest: req.app.get('cfg').uploads.dir
   });

   console.log(req.files); process.exit();

});

ここでreq.filesは未定義です。

multer を別のミドルウェアに入れて上記のルートにアタッチすると、同じことが起こります。

function initMulter(req, res, next) {
    multer({
     dest: req.app.get('cfg').uploads.dir
   });

   next();
}

 router.post('/uploads', initMulter, function (req, res, next) {
   console.log(req.files); process.exit();

});

この場合もreq.filesですundefined

私がやっていることが本当に間違っているのでしょうか、それともビールのせいにすべきでしょうか?

4

1 に答える 1

0

Multer は独自のミドルウェアです。

次の方法でルートに追加できます。

router.post('/uploads', multer({
     dest: './my/destination' //req.app.get('cfg').uploads.dir
}), function (req, res, next) {
    console.log(req.files);
    process.exit();
});

ただし、構成にアクセスするには別の方法を見つける必要があります。

1 つの方法は、構成を渡すかapp、エクスポート関数を使用することです。

module.exports = function(config) {
    router.post('/uploads', multer({
         dest: config.uploads.dir
    }), function (req, res, next) {
        console.log(req.files);
        process.exit();
    });
    return router;
});

次に、必要な場合は、

var route = require('./route')(app.get('cfg'));
于 2015-06-12T08:51:57.900 に答える