一、初探Node
1、Node是什麼?
Node是一個後端JS運行平臺,它支持JS在此環境中直接作爲後臺運行。
2、爲什麼要有Node?
我們有了JAVA、.NET、PHP,爲什麼還要這樣一個新的平臺?一方面,Node的後端語言是JavaScript,這樣就與前臺語言一致、簡潔,另一方面,Node在邏輯相對簡單、觸發頻繁的程序上運行效率較高。
二、初窺門徑
怎麼窺,好吧,人家有現成的初級教材,還挺詳細,層層遞進,深入淺出的!
Node入門
其實我今天要講的是針對該教材的,在該書的最後一個上傳圖片的示例,如果照搬代碼,會報錯如下:
- fs.js:439
- return binding.rename(pathModule._makeLong(oldPath),
- ^
- Error: ENOENT, no such file or directory 'C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\013
- f36035eec5259d50bbe4cb4574798'
- at Object.fs.renameSync (fs.js:439:18)
- at D:\JS鍜孒TML5\js鏈嶅姟鍣╪ode.js\noderumen\requestHandlers.js:36:12
- at IncomingForm.parse (D:\JS鍜孒TML5\js鏈嶅姟鍣╪ode.js\node_modules\formida
- ble\lib\incoming_form.js:121:9)
- at IncomingForm.EventEmitter.emit (events.js:85:17)
- at IncomingForm._maybeEnd (D:\JS鍜孒TML5\js鏈嶅姟鍣╪ode.js\node_modules\for
- midable\lib\incoming_form.js:383:8)
- at IncomingForm.handlePart (D:\JS鍜孒TML5\js鏈嶅姟鍣╪ode.js\node_modules\fo
- rmidable\lib\incoming_form.js:212:12)
- at File.end (D:\JS鍜孒TML5\js鏈嶅姟鍣╪ode.js\node_modules\formidable\lib\fi
- le.js:71:5)
- at WriteStream.flush (fs.js:1512:9)
- at Object.oncomplete (fs.js:297:15)
按着錯誤來說,它是找不到圖片的緩存文件,於是到C:\Documents and Settings\Administrator\Local Settings\Temp文件夾下找對應文件,我們找到了,
接下來看到有人說可能問題在於
fs.renameSync(files.upload.path, "/tmp/test.png");
該方法本是把C:\Documents and Settings\Administrator\Local Settings\Temp下的對應文件改名爲test.png並放到tmp目錄下而這個tmp必須要建立在nodejs目錄下(我的nodejs目錄在C:\Program Files\nodejs),建立後還是報錯,
有人覺得是fs模塊的rename有問題,有沒有問題我不知道,但是在本示例中問題卻不是它,而是路徑"/tmp/test.png",要麼改成"tmp/test.png",要麼改成"./tmp/test.png"
當然讀取文件的路徑也是如此:
fs.readFile("tmp/test.png", "binary", function(error, file)
三、其它說法
有人說,在window下運行要注意分盤,必須要在一個盤下,但是我調好後將代碼放到了D盤,nodejs在C盤也照常運行。
還有人說要添加如下代碼,其實這個也沒有必要
var form = new formidable.IncomingForm();
form.uploadDir = "tmp";