2015-12-02 4 views
2

Я использую экспресс-маршрутизатор для определения маршрутов, и мне нужно добавить промежуточное программное обеспечение, чтобы некоторые маршруты, просто добавив промежуточное программное обеспечение до функции обратного вызова, выдает следующую ошибку:Экспресс-маршрут с определенным промежуточным программным обеспечением с использованием Express.Router()

Error: Route.post() requires callback functions but got a [object Object] 

Я работаю с папками, как модули, мой модуль загрузки, а вот index.js:

module.exports = (function() { 

    var express   = require('express'), 
     router   = express.Router(), 
     multer   = require('multer'), 
     transaction_docs = multer({ dest: './client/public/docs/transactions/' }), 
     product_images = multer({ dest: './client/public/img/products' }), 
     upload   = require('./upload'); 

    router.route('/upload/transaction-docs') 
     .post(transaction_docs, upload.post);//If I take off transaction_docs theres no error 

    router.route('/upload/product-images') 
     .post(product_images, upload.post);//Same as above 

    return router; 

})(); 

а вот upload.js:

module.exports = (function() { 

    function post(request, response) { 

     var filesUploaded = 0; 

     if (Object.keys(request.files).length === 0) { 
      console.log('no files uploaded'); 
     } else { 
      console.log(request.files); 

      var files = request.files.file1; 
      if (!util.isArray(request.files.file1)) { 
       files = [ request.files.file1 ]; 
      } 

      filesUploaded = files.length; 
     } 

     response.json(
      { 
       message: 'Finished! Uploaded ' + filesUploaded + ' files.', 
       uploads: filesUploaded 
      } 
     ); 

    } 

    return { 
     post: post 
    } 

})(); 
+0

насчет замены module.exports с exports.post и регулируя остальную часть кода соответственно –

+0

Почему вы используете самоосуществляющуюся функцию? – undefined

+0

@ Vohuman Я видел пример, используя его так, это плохо? –

ответ

1

Вы используете multer неправильным способом. Для промежуточного программного обеспечения вы не можете напрямую использовать transaction_docs или product_images, поскольку они не являются функциями.

Поскольку вы планируете загружать более одного файла, вам необходимо использовать transaction_docs.array(fieldName[, maxCount]), что означает, что он примет массив файлов, все с именем fieldname. Необязательно ошибка, если загружено больше файлов maxCount. Массив файлов будет храниться в файлах req.files.

Пример:

var express = require('express') 
var multer = require('multer') 
var upload = multer({ dest: 'uploads/' }) 

var app = express() 

app.post('/profile', upload.single('avatar'), function (req, res, next) { 
    // req.file is the `avatar` file 
    // req.body will hold the text fields, if there were any 
}) 

app.post('/photos/upload', upload.array('photos', 12), function (req, res, next) { 
    // req.files is array of `photos` files 
    // req.body will contain the text fields, if there were any 
}) 

var cpUpload = upload.fields([{ name: 'avatar', maxCount: 1 }, { name: 'gallery', maxCount: 8 }]) 
app.post('/cool-profile', cpUpload, function (req, res, next) { 
    // req.files is an object (String -> Array) where fieldname is the key, and the value is array of files 
    // 
    // e.g. 
    // req.files['avatar'][0] -> File 
    // req.files['gallery'] -> Array 
    // 
    // req.body will contain the text fields, if there were any 
}) 
+0

Спасибо, теперь у меня есть еще одна проблема: файл, который я загружаю, является pdf, но когда он сохраняет его без расширения (загрузка одного файла), вот файл json: '{fieldname: 'file', originalname: 'Ejemplos .pdf ' кодирование: '7bit', MimeType: 'приложение/PDF', назначения:' ./client/public/docs/transactions/ ' имя файла: '32d8d06c38475b339e68b2a640fcc359', путь:' клиент \\ public \\ docs \\ transaction \\ 32d8d06c38475b339e68b2a640fcc359 ', размер: 484581} ' –

+0

Должен ли я добавить свойства extesion & name в json из углового, чтобы сохранить его с другим именем и правым расширением? –

+0

Я вижу, что вы опубликовали еще один вопрос. Постараюсь ответить там. –