NodeJs /强大,上传图片错误

我正在试图使用NodeJs和强大的图像/file upload表单。 我没有使用快递。 只是强大。 但是,无论如何,我用强大的方法来试用最常用的脚本,而且都没有工作。我的代码基本上和本教程中的代码完全一样: http : //justinkjchang.wordpress.com/2013/11/08/image-uploader -using-node-js /这里有很多这样的教程,在一些书籍或video中,我几乎看到了完全相同的东西,除了地雷之外,它们似乎都起作用了。 我已经安装了强大的,我有最新版本的和Node。 我也在Mac上。 当我尝试上传时,它会经历form.parse和所有内容,但是当它尝试写入文件时,会引发此错误:

/Users/USER/Documents/Node/requestHandlers.js:42 fs.rename(files.upload.path, "/tmp/test.png", function (error) { ^ TypeError: Cannot read property 'path' of undefined 

我是Nodejs的新手,所以任何帮助都会很好。 我也试过做file.write,它仍然抛出相同的错误。 任何帮助将很高兴地赞赏(:

用代码更新:

 var exec = require("child_process").exec; var qs = require("querystring"), fs = require("fs"), formidable = require("formidable"), url = require( "url" ); function start(response, request) { /* var fileName = "start.html" var localPath = __dirname; var mimeType = "text/html"; var name = localPath + "/" + fileName; getFile(name, response, mimeType); console.log("Request handler 'start' was called."); console.log("Serving File: " + name); */ var body = '<html>'+ '<head>'+ '<meta http-equiv="Content-Type" '+ 'content="text/html; charset=UTF-8" />'+ '</head>'+ '<body>'+ '<form action="/upload" enctype="multipart/form-data" '+ 'method="post">'+ '<input type="file" name="upload" multiple="multiple">'+ '<input type="submit" value="Upload file" />'+ '</form>'+ '</body>'+ '</html>'; console.log( "Request for 'start' is called." ); response.writeHead( 200, { "Content-Type" : "text/html" } ); response.end( body ); } function upload(response, request) { console.log("Request handler 'upload' was called."); console.log( "Preparing upload" ); var form = new formidable.IncomingForm(); form.parse(request, function(error, fields, files){ if(error){ console.log(error); console.log("Dun Goofed"); } console.log("parsing done"); fs.rename(files.upload.path, "/tmp/test.png", function (error) { if (error) { fs.unlink("/tmp/test.png"); fs.rename(files.upload.path, "/tmp/test.png"); } }); /* fs.rename(files.upload.path, "/tmp/test.png", function(err){ if(err){ fs.unlink("/tmp/test.png"); fs.rename(files.upload.path, "/tmp/test.png"); } }); */ response.writeHead(200, {"Content-Type": "text/plain"}); response.write("Received image: <br/>"); response.write("<img src='./show' />"); response.end(); }); } exports.start = start; exports.upload = upload; //exports.show = show; 

我省略了一些部分,因为它们与file upload无关,请原谅,只是旧的代码。 我也没有一个/显示function,因为我暂时删除它。 另外这里是我在控制台中得到的错误。 其中一个错误是因为上传取消。 当我input我想要上传的文件后,浏览器只是坐在那里一会儿,等待服务器的请求,在控制台中,它只是在form.parse之前停下来,然后坐在那里无所事事,它推出了所有的错误。

 Web Server started on 127.0.0.1:8888 Request for / received. About to route a request for / Served a request for / Request for 'start' is called. Request for /upload received. Received POST data chunk About to route a request for /upload Served a request for /upload Request handler 'upload' was called. Preparing upload 

成功执行,直到这里。 然后,浏览器等待一段时间,然后popup没有收到数据,或者网页不可用,然后这些错误出现在控制台。

 {} [Error: Request aborted] Dun Goofed parsing done /Users/USER/Documents/Node/requestHandlers.js:50 fs.rename(files.upload.path, "/tmp/test.png", function (error) { ^ TypeError: Cannot read property 'path' of undefined at /Users/USER/Documents/Node/requestHandlers.js:50:31 at IncomingForm.<anonymous> (/Users/USER/node_modules/formidable/lib/incoming_form.js:89:9) at IncomingForm.EventEmitter.emit (events.js:95:17) at IncomingForm._error (/Users/USER/node_modules/formidable/lib/incoming_form.js:272:8) at IncomingMessage.<anonymous> (/Users/USER/node_modules/formidable/lib/incoming_form.js:107:12) at IncomingMessage.EventEmitter.emit (events.js:92:17) at abortIncoming (http.js:1911:11) at Socket.serverSocketCloseListener (http.js:1923:5) at Socket.EventEmitter.emit (events.js:117:20) at TCP.close (net.js:465:12) 

我也有同样的问题。

删除代码request.setEncoding("utf8"); 在server.js中

喜欢这个:

 function start(route, handler) { http.createServer(function(request, response) { var postData = ""; var pathname = url.parse(request.url).pathname; route(handler, pathname, response, request); }).listen(8889); }