Node.js 344错误发送邮件后无法设置标头

时间:2016-08-05 06:47:38

标签: node.js

我试图绕过这个错误,我不明白为什么。我看过它的几个帖子,但它们都是不同的情况,没有一个与我相匹配。所以感谢帮助。 我想上传多个文件上传。 但我确实上传文件它的工作只有一个。 但是当我尝试上传多个文件时,它无法正常工作 你能给我一个答案吗?



router.post('/contents/insert/upload', ensureAuthenticated, function(req, res, next) {
	
	var form = new formidable.IncomingForm();
	
	form.parse(req);
//	form.on("fileBegin", function (name, file){
//		console.log('upload come on3');
//		
//    });
    form.on("file", function (name, file){
        fs.readFile(file.path, function(error, data){
        	var filePath = __dirname + '/../public/uploads/' + file.name;
        	
        	fs.writeFile(filePath, data, function(error){
        		if(error){
        			throw err;
        			//res.redirect('back');
        		}else {
        			res.redirect('back');
        		}
        	});
        });
    });

});

<form action="/adm/contents/insert/upload" method="post" enctype="multipart/form-data" >
			    <!-- <input type="file" name="file" />
			    <input type="submit" /> -->
				<div class="file-field input-field">
			    	<div class="btn">
						<span>input images</span>
				    	<input type="file" name="file" multiple>
			    	</div>
			      	<div class="file-path-wrapper">
			        	<input class="file-path validate" type="text">
			      	</div>
			    </div>
			    <input type="submit" class="btn waves-effect waves-light" value="upload" />
			</form>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:2)

将为上传中的每个文件触发file事件,因此最终您的代码将为每个上传的文件发出res.redirect()。这将导致错误(您只能在请求的生命周期内发出重定向或发回一个响应)。

相反,您想要监听end事件,并在那里发出重定向:

form.on("file", function (name, file) {
  ...handle the file copy here, but don't call `res.redirect()` anywhere...
});

form.on("end", function() {
  res.redirect('back');
});

FWIW,在我看来,你想要设置Formidable的uploadDir选项,或使用fs.rename(),而不是在上传后将文件写入新位置(不是'非常有效率。)