一、初探Node

1、Node是什么?

Node是一个后端JS运行平台,它支持JS在此环境中直接作为后台运行。

2、为什么要有Node?

我们有了JAVA、.NET、PHP,为什么还要这样一个新的平台?一方面,Node的后端语言是JavaScript,这样就与前台语言一致、简洁,另一方面,Node在逻辑相对简单、触发频繁的程序上运行效率较高。

二、初窥门径

怎么窥,好吧,人家有现成的初级教材,还挺详细,层层递进,深入浅出的!

Node入门

其实我今天要讲的是针对该教材的,在该书的最后一个上传图片的示例,如果照搬代码,会报错如下:

  1. fs.js:439  
  2.   return binding.rename(pathModule._makeLong(oldPath),  
  3.                  ^  
  4. Error: ENOENT, no such file or directory 'C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\013  
  5. f36035eec5259d50bbe4cb4574798'  
  6.     at Object.fs.renameSync (fs.js:439:18)  
  7.     at D:\JS鍜孒TML5\js鏈嶅姟鍣╪ode.js\noderumen\requestHandlers.js:36:12  
  8.     at IncomingForm.parse (D:\JS鍜孒TML5\js鏈嶅姟鍣╪ode.js\node_modules\formida  
  9. ble\lib\incoming_form.js:121:9)  
  10.     at IncomingForm.EventEmitter.emit (events.js:85:17)  
  11.     at IncomingForm._maybeEnd (D:\JS鍜孒TML5\js鏈嶅姟鍣╪ode.js\node_modules\for 
  12. midable\lib\incoming_form.js:383:8)  
  13.     at IncomingForm.handlePart (D:\JS鍜孒TML5\js鏈嶅姟鍣╪ode.js\node_modules\fo  
  14. rmidable\lib\incoming_form.js:212:12)  
  15.     at File.end (D:\JS鍜孒TML5\js鏈嶅姟鍣╪ode.js\node_modules\formidable\lib\fi  
  16. le.js:71:5)  
  17.     at WriteStream.flush (fs.js:1512:9)  
  18.     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";