获取req.files一直为undefined 请问是什么情况
发布于 10 年前 作者 jinhezx 19783 次浏览 最后一次编辑是 8 年前
<div id="login">
			<h2>用户登录</h2>
			<form method="post" enctype="multipart/form-data" action="http://localhost:3000/site/upload/20008">
			用户名:<input id="contact" type="file"  /><br/>
			<input type="submit" class="btn_login" value="登录" />
			</form>
</div>	

console.log(req.files);
8 回复

增加一个中间件到express种 app.use(express.bodyParser({uploadDir: ‘./uploads’}))

增加了之后还是不行,会不会是 enctype=“multipart/form-data” 的原因? console.log(req.body); console.log(req.files); 结果分别为: {} undefined 但是 去掉enctype="multipart/form-data" console.log(req.body); console.log(req.files); 结果分别为: {username:“abc”,password:“123” ,thumbnail:“a.txt”>} undefined

原来是这样的:

app.use(express.bodyParser({uploadDir:’./tmp’})); //一定要放在app.use(app.router);前面 app.use(app.router);

找了好久才找到原因。。。

我的也是这个情况,按楼上说的放到前面也还是不行。改用别的中间件了

@librasama express 4 + 用multer

建议用multer 自豪地采用 CNodeJS ionic

纠正下楼主的编程风格,首先你的form里的action要写成相对路径,因为你不可能每次发布都去修改一次源代码对吧? 其次你的表单input属性没有name属性,POST提交表单后台接收需要寻找name属性标签的

很开心看到楼主最终解决问题。Express中设置中间件的顺序是很重要的,先设置好中间件,在绑定router。中间件把请求处理完之后(也就是经过解析文件,产生了req.files),在传到后继的router中,router才能继续处理。大概原理是这样 :)

回到顶部