2017-01-05 60 views
1

我用羽毛上傳文件庫。我嘗試從代碼中分離出邏輯,我想把上傳代碼放在index.js中,但在我的情況下,放在中間件目錄下的pdf.js中。如何分隔羽毛中間件?

下面是我的作品index.js:

'use strict'; 

const pdf = require('./pdf'); 
const record = require('./record'); 
const records = require('./records'); 

const handler = require('feathers-errors/handler'); 
const notFound = require('./not-found-handler'); 
const logger = require('./logger'); 

const uploadPdf = require('./upload-pdf'); 

module.exports = function() { 
    // Add your custom middleware here. Remember, that 
    // just like Express the order matters, so error 
    // handling middleware should go last. 

    const app = this; 

    app.use('/rekord/:id.html', record(app)); 
    app.use('/rekordy.html', records(app)); 
    app.use('/pdf/:id', uploadPdf.single('file'), pdf(app)); 

    app.use(notFound()); 
    app.use(logger(app)); 
    app.use(handler()); 
}; 

這裏被上傳-pdf.js文件:

var multer = require('multer') 

    var storagePdf = multer.diskStorage({ 
    destination: 'public/pdf', 
    filename: function (req, file, cb) { 

     var id = req.params.id 

     cb(null, id+'.pdf') 
    } 
    }); 

    module.exports = multer({ 
     storage: storagePdf, 
     fileFilter: function (req, file, cb) { 
     if (file.mimetype !== 'application/pdf') { 
      return cb(null, false, new Error('I don\'t have a clue!')); 
     } 
     cb(null, true); 
    } 
    }); 

而且pdf.js文件:

'use strict'; 

module.exports = function(app) { 
    return function(req, res, next) { 

    if (req.file) { 
     return res.end('Thank you for the file'); 
    } 
    return res.end('false'); 

    next(); 

    }; 
}; 

我會喜歡將upload-pdf.js和pdf.js合併爲一個文件

回答

0

不是特別羽毛具體的,就像任何其他的Express應用程序,你可以把代碼放到自己的模塊:

'use strict'; 

const pdf = require('./pdf'); 
const record = require('./record'); 
const records = require('./records'); 

const handler = require('feathers-errors/handler'); 
const notFound = require('./not-found-handler'); 
const logger = require('./logger'); 

module.exports = function() { 
    // Add your custom middleware here. Remember, that 
    // just like Express the order matters, so error 
    // handling middleware should go last. 

    const app = this; 

    app.use('/rekord/:id.html', record(app)); 
    app.use('/rekordy.html', records(app)); 
    app.use('/pdf/:id', pdf.upload.single('file'), pdf.process(app)); 

    app.use(notFound()); 
    app.use(logger(app)); 
    app.use(handler()); 
}; 

pdf.js

'use strict'; 

var multer = require('multer') 

var storagePdf = multer.diskStorage({ 
    destination: 'public/pdf', 
    filename: function(req, file, cb) { 

    var id = req.params.id 

    cb(null, id + '.pdf') 
    } 
}); 

exports.upload = multer({ 
    storage: storagePdf, 
    fileFilter: function(req, file, cb) { 
    if (file.mimetype !== 'application/pdf') { 
     return cb(null, false, new Error('I don\'t have a clue!')); 
    } 
    cb(null, true); 
    } 
}); 

exports.process = function(app) { 
    return function(req, res, next) { 

    if (req.file) { 
     return res.end('Thank you for the file'); 
    } 
    return res.end('false'); 

    next(); 
    }; 
}; 

NodeJS module system docs是非常有助於瞭解這一切是如何適合在一起。

+0

謝謝你的回覆。你的答案是有幫助的。是否有可能將所有文件放在一個文件中以便不需要使用:'const upload Pdf = require('./ upload-pdf')'? – SeaDog

+0

這不就是你以前做的事嗎? – Daff

+0

也許是這樣,但我的代碼不起作用。你的代碼工作正常,但你包含兩個文件:'const pdf = require('./ pdf')'和'const uploadPdf = require('./ upload-pdf');'我想把它放到一個文件中。可能嗎?你能告訴我其他的例子嗎? – SeaDog