在此之前需要说明一下,windows下使用nodejs取路径时需要在前面加上一个'.'。这很奇怪,比如:'/cache/t' 直接这样写是执行不了的。需要变成:'./cache/t'。
windows下使用mkdir时发现根本创建不了一个目录,但对比一下自己之前写的例子,发现:当有多个路径时,比如:'./cache/tt',如果当前目录下没有cache目录,则会在你写的function里执行throw err;
var fs = require('fs');
fs.mkdir('./cache/tt', 0776, function(err){
if(err) throw err;// 如果没有cache目录,则抛出异常
else {
// my code
// 存在cache目录时执行
}
})
通过yss上面的分析,已经知道下面要做的事了。就是对每一层目录循环创建了~
看下面代码:
/* *
* nkdir for windows (md command)
* @params is the same as the mkdir
*/
function mkdirs(p, mode, callback){
callback = callback || function(){};
/* first should be . */
if(p.charAt(0) != '.'){
callback(p);
return;
}
/* split it */
var ps = p.split('/'), len = ps.length, i=1, tmp;
while(i++<len){
tmp = ps.slice(0,i).join('/');
//console.log(tmp)
//path.exists(tmp, function(exists){
//if(!exists){
fs.mkdir(tmp, mode);
//console.log(i+": "+tmp)
//}
//});
}
callback();
}
但是写上面代码的时候,我发现不能通过path.exists去做。如果把上面的'//'的注释条去掉的话。输出的结果:
E:\code\node>node e\http.js
./cache
./cache/ppt
./cache/ppt/img
./cache/ppt/img/imgloadlazy
6: ./cache/ppt/img/imgloadlazy
6: ./cache/ppt/img/imgloadlazy
6: ./cache/ppt/img/imgloadlazy
很奇怪了吧~
这个问题有待yss之后去寻找,也希望看到这篇文章的你给我解答。