NodeJS之始
Node.js 可以称得上是过去一年里最热门的项目,现在整个NodeJS社区也都非常活跃,不论是关注的还是围观的,都对这个项目抱有极大的兴趣。说来惭愧,虽然自己也一直想接触,但总是再三都把精力花在了其它乱七八糟的地方。既然今年下决心把重心从CSS挪回JS,NodeJS自然是不能再错过了。
我看的是著名的 Manuel Kiessling 的 The Node Beginner Book 的中文版 Node入门,超级赞的教材——也许其作者并非是JS的专家,但是绝对是写教材的天才。轻松的语言和明晰的思路,使读者花不了多久就能明白Node是个什么,以及,它能干什么。
关于node的说明我就不罗嗦了,网络上已经有太多可供参考。我之所以写这篇文章,是由于希望记录一个学习过程中遇到的小问题。因为我相信很多人都会遇到类似的问题。
如果使用windows做环境,教程里的一些命令稍有差别,不过这并没有什么影响。跟着教程一步步走是非常顺利的,直到最后一步“上传图片并呈现”,node会抛出这么一个错误:
fs.js:330
return binding.rename(pathModule._makeLong(oldPath),
^
Error: UNKNOWN, unknown error 'C:\Users\iifksp\AppData\Local\Temp\f57490f2719424b868de0e4bf3f41fea'
at Object.renameSync (fs.js:330:18)
at D:\xampp\htdocs\aptana\code\js\nodejs\requestHandlers.js:35:6
at IncomingForm.<anonymous> (D:\xampp\htdocs\aptana\code\js\nodejs\node_modules\formidable\lib\incoming_form.js:117:9)
at IncomingForm.emit (events.js:64:17)
at IncomingForm._maybeEnd (D:\xampp\htdocs\aptana\code\js\nodejs\node_modules\formidable\lib\incoming_form.js:376:8)
at D:\xampp\htdocs\aptana\code\js\nodejs\node_modules\formidable\lib\incoming_form.js:207:12
at D:\xampp\htdocs\aptana\code\js\nodejs\node_modules\formidable\lib\file.js:59:5
at Object.oncomplete (fs.js:1289:9)
看起来是rename临时文件时出错。当我到对应目录下查看,发现这个文件是确实存在的,将其重命名后也确实就是自己上传的图片文件。一开始以为是win7的权限问题,但是后来发觉把目录统一到C盘后问题就消失了,所以可以确定是跨目录重命名文件导致的问题。变更关键字后,就找到了这个问题的讨论,TooTallNate在 5# 关闭了这个问题,并增加了这个错误的映射,从 unknown error 变更为 cross-device link not permitted。
如果使用windows并且将目录分开放在两个分区,那么一定会遇到这个问题。解决的办法就是放在一个分区里,都放在C盘或者,设置上传的临时路径到文件所在的同一盘符:
var form = new formidable.IncomingForm();
form.uploadDir = "./tmp";