2015-11-02 1 views
2

Я получаю следующую ошибку при попытке получить загруженные файлы. Я искал сеть и все, что я обнаружил, что люди, употребляющие результат multer() как связующее программное обеспечение, но все, что я получил это ошибки ...Ошибка NodeJs Multer

/node_modules/express/lib/router/index.js:458 
    throw new TypeError('Router.use() requires middleware function but got a 
     ^
TypeError: Router.use() requires middleware function but got a Object 
at Function.use (/node_modules/express/lib/router/index.js:458:13) 
at EventEmitter.<anonymous> (/node_modules/express/lib/application.js:219:21) 
at Array.forEach (native) 
at EventEmitter.use (/node_modules/express/lib/application.js:216:7) 
at Object.<anonymous> (/app.js:40:5) 
at Module._compile (module.js:460:26) 
at Object.Module._extensions..js (module.js:478:10) 
at Module.load (module.js:355:32) 
at Function.Module._load (module.js:310:12) 
at Function.Module.runMain (module.js:501:10) 

Вот код этой части приложения

var express = require('express'); 
var multer = require('multer'); 
var mul = multer({limits : {fileSize : 1000000, files : 10}}); 
var app = express(); 
var port = 3000; 
var server = require('http'); 
app.use('/files', mul, files); 
function files (req, res) { 
    console.log(req.files, req.file); 
} 
server = server.createServer(app); 
server.listen(process.env.PORT || port); 
+0

смотрите здесь: [multer ошибке] (http://stackoverflow.com/questions/31496100/cannot-app-usemulter-requires-middleware-function-error) –

+0

Пожалуйста, обратитесь сюда: [ошибка multer ] (http://stackoverflow.com/questions/31496100/cannot-app-usemulter-requires-middleware-function-error) –

ответ

2

Код, который у вас есть для настройки маршрутов и multer, кажется немного неправильным. Вот как это описано here. Второй параметр (ы) в app.use должны быть функции или функцииapp.use docs пока mul в вашем коде является Object, результат вашей конфигурации фабрики вызова ранее здесь: var mul = multer({limits : {fileSize : 1000000, files : 10}});

//other stuff  
var mul = multer({limits : {fileSize : 1000000, files : 10}}); 

app.use('/files', [mul, files]); 

function files (req, res) { 
    console.log(req.files, req.file); 
} 
//other stuff 

UPD

Вы пытались сделать это, согласно документам на странице модуля?

var mul = multer({ dest: 'your_uploads_path/' }); 
app.use('/files', mul.array(), files); //or other option 

других вариантов здесь: https://www.npmjs.com/package/multer#multer-opts

UPD2

According to docsmulter действительно возвращает объект, который должен быть потребляемой busboy, так что вам нужно, чтобы это требуется и настроено, а также - https://github.com/mscdex/busboy#busboy-methods

+0

Я тестировал, прежде чем спрашивать, все еще бросает .... :( –

+0

какая ошибка вы получите в этом случае ?, когда у вас есть 'app.use ('/files ', [mul, files]);' – shershen

+0

То же самое, что выражение ожидает функцию, но получает объект –

1

Вот код, который работает, благодаря @shershen

//other stuff  
var mul = multer({limits : {fileSize : 1000000, files : 10}}); 
app.use('/files', mul.any(), files); 
function files (req, res) { 
console.log(req.files, req.file); 
} 
//other stuff