2017-10-07 42 views
0

我根據它使用在github上自述文件
它的自述中所說的呼叫multer在這樣的:expressjs - 如何要求multer在另一個文件

app.js

var multer = require('multer') 
app.post('/upload', upload.single('image'), function(req, res){}) 

但我確定我的功能(REQ,RES)在另一個文件 - post.js - 和我的代碼app.js看起來是這樣的:

app.post('/upload', upload.single('image'), post.new) 

我怎樣才能只需要在post.js multer,差不多是這樣:

post.js

var multer = require('multer') 
module.exports.new = function(req, res){ 
    //access to req.file 
} 

app.js

app.post('/upload', post.new) 

回答

1

我能想到的有兩種方式。

首先,你可能暴露new作爲數組:

module.exports.new = [upload.single('image'), function(req, res) { 
    ... 
}]; 

其次,你可以在你的函數中使用multer

var imageUpload = upload.single('image'); 

module.exports.new = function(req, res) { 
    imageUpload(req, res, function(err) { 
     // Put the rest of your code here 
    }); 
}; 

在這第二種方法,我們只是調用multer中間件自己的功能,通過它我們自己的函數作爲next回調使用。有一個關於在https://github.com/expressjs/multer#error-handling這樣做雖然它描述了一個稍微不同的上下文中的技術多一點點信息。

1

對於MVC結構可以簡單地這樣做:

function Uploader(req, res, next) { 
    var storage = multer.diskStorage({ 
     destination: function (req, file, cb) { 

      cb(null, your_path); 

     }, 
     filename: function (req, file, cb) { 
      cb(null, filename) 
     } 
    }); 

    var upload = multer({ 
     storage: storage 
    }); 

    return upload; 
} 

module.exports = Uploader 

在另一個文件中,你可以簡單地使用

app.post('/upload', Uploader.single('image'), function(req, res){}) 

如果您不希望創建功能,你可以做以下:

var storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
    cb(null, upload_filePath) 
    }, 
    filename: function (req, file, cb) { 
     cb(null,filename) 
    } 
}) 
var upload= multer({ 
    storage : upload 
}) 

module.exports.upload=upload; 

兩者給出相同的結果,但是使用功能是比較合適的方式。

相關問題