Node服务器与AJAX复习第二天

这是我参与更文挑战的第21天,活动详情查看:更文挑战

FS模块

File system 文件系统

当前这个模块用于操作文件与文件夹

创建文件

fs.appendFile(filePath, content, callback);
filePath: 文件路径
content: 文件内容
callback: 回调函数
回调函数中有err 表示创建过程中可能出现的异常
该方法有两种用法,第一种创建文件(当文件不存在时),第二种追加内容(当文件已经存在时)
复制代码
// 引入FS模块
var fs = require("fs");

// 创建文件
fs.appendFile("./a.txt", "这是一个txt文件", function(err) {
	// 当前函数就是创建文件完毕之后的回调函数
	// err 表示 创建过程中可能出现的异常
	console.log(err);
	console.log("创建完毕");
});

console.log(1);
复制代码

输出:

3.png

读取文件

fs.readFile(filePath, callback);
filePath: 文件路径
callback: 回调函数
err: 读取过程中可能发生的错误 没错误时 err是null 有错误时 err时错误对象
data: 读取到的文件内容 它的类型时buffer
复制代码

Demo:

fs.readFile("index.html", function(err, data) {
	console.log(err);
	console.log(data);
	console.log(data.toString());
})
复制代码

输出:

图片3.png

删除文件

fs.unlink(filePath, callback);
filePath: 被删除的文件的地址
callback: 回调函数
复制代码

Demo:

// 引入fs
var fs = require("fs");

// 调用unlink方法删除文件
fs.unlink("./index.html", function() {
	console.log("删除")
})
复制代码

重命名

fs.rename(oldPath, newPath, callback);
oldPath: 原路径
newPath: 新路径
callback: 回调函数
复制代码

Demo:

var fs = require("fs");
fs.rename("a.js", "b.js", function(err) {
	console.log("重命名")
})
复制代码

创建文件夹

fs.mkdir(dirPath, callback);
dirPath: 文件夹路径
callback: 回调函数
复制代码

Demo:

var fs = require("fs");
fs.mkdir("a", function() {
	
})
复制代码

删除文件夹

fs.rmdir(dirPath, callback);
dirPath: 被删除的文件夹
callback: 回调函数
注:该方法只可以删除空目录
复制代码

Demo:

var fs = require("fs");

fs.rmdir("abc", function(err) {
	console.log(err);
})
复制代码

如果删除非空目录:

23.png

读取文件夹

fs.readdir(dirPath, callback);
dirPath: 被读取的文件夹
callback: 回调函数
err: 错误对象
arr: 被读取的文件夹中所有文件与文件夹名组成的数组
复制代码

Demo:

var fs = require("fs");

fs.readdir("./新建文件夹", function(err, arr) {
	console.log(err);
	console.log(arr);
});
复制代码

图片4.png

判断一个目标是文件还是文件夹

fs.stat(path, callback);
path: 目标路径
callback: 回调函数
err: 错误对象
state: 根据目标生成的一个对象 该对象有一个方法 isDirectory() 返回布尔值 如果是true 说明是文件夹 否则 说明是文件
复制代码

Demo:

var fs = require("fs");

fs.stat("./新建文件夹/aaa.txt", function(err, state) {
	console.log("aaa.txt" + (state.isDirectory() ? "是" : "不是") + "一个文件夹");
})

fs.stat("./新建文件夹/aaaa", function(err, state) {
	console.log("aaaa" + (state.isDirectory() ? "是" : "不是")+ "一个文件夹");
})
复制代码

结果:

21.png

删除非空目录

var fs = require("fs");

function del(dirPath) {
	// 读取该文件夹
	var arr = fs.readdirSync(dirPath)
	// 循环
	for(var i = 0; i < arr.length; i++) {		var state = fs.statSync(dirPath + "/" + arr[i]);
		// console.log(dirPath + "/" + arr[i] + (state.isDirectory() ? "是":"不是") + "一个文件夹");
		if (state.isDirectory()) {
			del(dirPath + "/" + arr[i]);
		} else {
			fs.unlinkSync(dirPath + "/" + arr[i])
		}
	}
	// 最后删除文件夹 
	fs.rmdirSync(dirPath);
}

module.exports = del;
复制代码

URL模块

该模块用于处理URL字符串和URL对象

URL.parse

parse方法用于将URL字符串解析成URL对象

Demo:

有如下字符串: 
   var str = http://www.icketang.com/pc/index.html?username=laosi&password=123#ccc
想要获取url中的某一个部分:
引入url模块
var url = require("url");
调用parse方法解析字符串
url.parse(str); 返回值是一个对象
复制代码

对象如下:

04.png

静态服务器

// 引入http模块
var http = require("http");
// 引入fs模块
var fs = require("fs");
// 引入url模块
var url = require("url");

// MIMEType大全
var MIMEType = {  
	"*"	      :"application/octet-stream",
	"323"	    :"text/h323",
	"acx"	    :"application/internet-property-stream",
	"ai"	    :"application/postscript",
    ……
 }

// 创建服务器
var server = http.createServer(function(req, res) {
	// if (req.url === "/index.html") {
	// 	fs.readFile("./index.html", function(err, data) {
	// 		res.end(data);
	// 	})
	// 	return;
	// }

	// if (req.url === "/second.html") {
	// 	fs.readFile("./second.html", function(err, data) {
	// 		res.end(data);
	// 	})
	// 	return;
	// }
	// 我们发现 当访问的是/index.html时,读取的是./index.html 访问的是/second.html时 读取的是./second.html 我们可以直接强行读取 不管发送的是什么请求 全部前面加.后读取
	// console.log(req.url);
	// 定义变量 接受格式化之后的对象
	var url_obj = url.parse(req.url);
	// console.log(url_obj);
	var pathName = url_obj.pathname;
	fs.readFile("." + pathName, function(err, data) {
		if (err) {
			res.setHeader("content-type", "text/plain;charset=utf-8");
			res.end("抱歉, 您读取的  ." + pathName + "不存在");
			return;
		}
		// 获取拓展名  index.html
		var extName =  pathName.slice(pathName.indexOf(".") + 1);
		res.setHeader("content-type", MIMEType[extName] + ";charset=utf-8")
		res.end(data);
	})
})

// 监听端口号
server.listen(3000);
复制代码

HTTP请求方式

GET请求

HTTP请求根据目的可以划分成不同的种类。
get请求表示“从服务器上获取内容”
特点: 触发方式多 
地址栏输入
img标签发出的请求
link标签发出的请求
script标签发出的请求
表单发出的请求
ajax
    没有请求正文
携带的数据就是query
  便于分享
复制代码

POST请求

post请求表示“往服务器上放置内容”
特点:触发方式少
表单
ajax
  保密性高
因为请求时携带的数据都放在请求正文内
  不便于分享
复制代码

NodeJS处理GET请求

前端发送的请求:

http://localhost:3000/login?username=%E7%8E%8B%E8%80%81%E4%BA%94&psd=123
复制代码

后端处理:

所谓的后端处理,其实就是将前端发送过来的数据或者保存,或者查询等处理方式。

var url_obj = url.parse(req.url, true); 
// 定义接口处理/login
if (pathName === "/login" && req.method.toLowerCase() === "get") {
	console.log(url_obj.query.username);
	console.log(url_obj.query.psd);
	res.end("hello");
	return;
}
复制代码

url.parse的第二个参数为true时,表示将解析出来的query也转化成对象。

为false时:

图片5.png

为true时:

14.png

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享