1. fs.readFile(path,callback(err,data)):读取文件
有两个参数,第一个是文件的完整路径,当前目录写./(必须要写,为了兼容Windows系统和Linux系统),第二个参数是回调函数,表示文件读取完成之后做的事情
//可以证明事件环机制
var http=require("http");
var fs=require("fs");
var server=http.createServer(function(req,res){
//不处理小图标
if (req.url == "/favicon.ico") {
return;
}
//生成一个随机的五位数id给用户
var userid=parseInt(Math.random() * 89999)+10000;
console.log("欢迎"+userid);
res.writeHead(200,{"Content-type":"text/html;charset=uft-8"});
//两个参数,第一个是完整路径,当前目录写./
//第二个参数是回调函数,表示文件读取完成之后做的事情
fs.readFile("./test/1.txt",function(err,data){
if (err) {
throw err;
}
console.log(userid+"文件读取完毕");
res.end(data);
});
});
server.listen(3000,"127.0.0.1");
2. fs.mkdir(path):以异步的方式新建文件目录,如果目录存在,则抛出异常。
fs.mkdir("./test/fff");
3. fs.stat(path,callback(err,stats)):检测文件的状态,处理是一个文件还是一个目录(true表示为一个目录)
var http=require("http");
var fs=require("fs");
http.createServer(function(req,res){
//不处理小图标
if (req.url=="/favicon.ico") {return;}
fs.stat("./test/aaa",function(err,stats){
//检测这个路径是不是一个文件夹(或者目录)
console.log(stats.isDirectory());//显示结果为true
});
res.end();
}).listen(3000,"127.0.0.1");
4. fs.readdir(path,callback(err,files)):读取该目录下的所有文件和目录,并返回一个该目录中包含的所有文件和子目录的数组。
//强行让异步变成同步处理,不能用普通的for循环
var http=require("http");
var fs=require("fs");
http.createServer(function(req,res){
//不处理小图标
if (req.url=="/favicon.ico") {return;}
//存储所有子目录
var dirs=[];
fs.readdir("./test",function(err,files){
//files是该目录下的所有东西,包括文件和子目录,是一个数组
//这个迭代器就是强行把异步的函数变成同步的函数,一步一步进行
(function iterator(i){
//遍历结束
if (i==files.length) {
console.log(dirs);
return;
}
fs.stat("./test/"+files[i], function(err,stats){
//检测成功之后做的事,是目录就放入数组中
if (stats.isDirectory()) {
dirs.push(files[i]);
}
iterator(i+1);
});
})(0);
});
res.end();
}).listen(3000,"127.0.0.1");
5. 静态资源文件管理(让一个文件夹成为一个根目录),并且设置其MIME类型
var http=require("http");
var url=require("url");
var fs=require("fs");
var path=require("path");
http.createServer(function(req,res){
// 不处理小图标
if (req.url=="/favicon.ico") {return;}
//得到用户的路径
var pathname=url.parse(req.url).pathname;
//默认首页
if (pathname=="/") {
pathname="index.html";
}
//获取路径中的扩展名
var extname=path.extname(pathname);
//去读取这个文件
fs.readFile("./test/"+pathname, function(err,data){
if (err) {
//如果此文件不存在,就返回404
fs.readFile("./test/404.html", function(err,data){
res.writeHead(404,{"Content-type":"text/html;charset=utf-8"});
res.end(data);
});
return;
};
//MIME类型就是text/html,image/jpg
getMime(extname, function(mime){
res.writeHead(200, {"Content-type":mime});
res.end(data);
});
});
}).listen(3000,"127.0.0.1");
function getMime(extname, callback){
//读取mime.json文件,
fs.readFile("./mime.json", function(err,data){
if (err) {
throw Error("找不到mime.json文件");
return;
}
//转成JSON
var mimeJson=JSON.parse(data);
var mime =mimeJson[extname] || "text/plain";
//执行回调函数,mime类型字符串就是它的参数
callback(mime);
});
};