Node.js学习笔记--fs模块

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);
	});
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值