关于在express4 中的multer使用问题的疑问
发布于 9 年前 作者 humucai 7223 次浏览 最后一次编辑是 8 年前 来自 问答

在下菜鸟刚入,试着用express练习下,需要文件上传,于是用了 multer ,但是当我app.use(multer()),加入中间件启动的时候,控制台报出如下错误 : /Users/humucai/Documents/jsworkspace/chatroom/node_modules/express/lib/application.js:209 throw new TypeError(‘app.use() requires middleware functions’); ^ TypeError: app.use() requires middleware functions at EventEmitter.use (/Users/humucai/Documents/jsworkspace/chatroom/node_modules/express/lib/application.js:209:11) at Object.<anonymous> (/Users/humucai/Documents/jsworkspace/chatroom/app.js:31: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 Module.require (module.js:365:17) at require (module.js:384:17) at Object.<anonymous> (/Users/humucai/Documents/jsworkspace/chatroom/bin/www:7:11) 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) at startup (node.js:129:16) at node.js:814:3

请各位大神指导下。
我只是希望把图片文件以Buffer类型直接存入mongodb中,我希望能够从request.body中取出文件Buffer,不知道有什么好的方法。multer官方文档示例都是直接 app = express() ,然后 app.post('xxx'.multer().array(),function(req,res){});我希望在 router = express.Router(); router.post(),在这样的router中操作文件,还请各位指点一下。
6 回复
  1. 报错应该是版本问题,我试了一下express@4.9.5+multer@0.1.6下面这个写法没报错;
  2. multer支持buffer输出到内存,记得看文档,或者按照你提到的写法也可以拿到buffer;
  3. app.post()和router.post()调用的是express里同一个函数,参数一样就行了。

附:第一条的代码

var app = require('express')();
var multer = require('multer');

app.use(multer());
app.listen(3000);

@albin3 非常感谢能够回答,的确当我我使用multer@0.1.6的是没有那样的错误的,问题已经解决了,multer当前npm最新版是1.0.1,已经没有app.use(multer())这样的用法,顺便问下express@4.95没有找到,npm最新版是4.13.2。 这样就可以了:

var express = require('express'); 
var router = express.Router();
var multer = require('multer');

router.post('/upload',multer().single('file'),function(req,res){
	console.log(req.file);//file
	console.log(req.body);
});
module.exports = router; 

@albin3 屏幕快照 2015-08-02 下午5.59.45.png body的中文被截断了(连右边的大括号都截断了),英文却正常,不知为什么?

@humucai 这是显示的问题吧?file跟body都正常打印为json形式了。

你取取看能不能取出来值: req.body.haha

@albin3 thank you !的确是显示问题。

我也遇到过这种错误 我是直接没管 换成低版本的了 学习下

回到顶部