【问题标题】:NodeJs Multer errorNodeJs Multer错误
【发布时间】:2016-02-02 11:37:51
【问题描述】:

我在尝试检索上传的文件时遇到以下错误。 我在网上搜索过,我发现的只是人们将 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);

【问题讨论】:

标签: node.js multer


【解决方案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

【讨论】:

    【解决方案2】:

    您用于配置路由和 multer 的代码似乎有点错误。这就是它被描述为here 的方式。 app.use 中的第二个参数应该是 function 或 functions app.use docs 而您代码中的 mulObject,这是您之前在此处调用配置工厂的结果: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 docs multer 确实返回对象,应该由busboy 使用,因此您也需要它并对其进行配置 - https://github.com/mscdex/busboy#busboy-methods

    【讨论】:

    • 在这种情况下你会遇到什么错误?,当你有 'app.use('/files', [mul, files]);'
    • 表达期望函数但得到一个对象的相同
    • 您是否尝试过使用来自官方 multer 页面的示例 - npmjs.com/package/multer?检查更新的答案
    • 它不会抛出错误,但请求不会被捕获。如果你的意思是 multer().array()
    • 是 - 单个、数组或字段选项之一。您是否也尝试将 app.use 更改为 app.post ?
    猜你喜欢
    • 1970-01-01
    • 2021-02-25
    • 2021-08-16
    • 2016-09-14
    • 2018-05-24
    • 2021-04-05
    • 2019-09-04
    • 2015-06-12
    • 2016-09-03
    相关资源
    最近更新 更多