【SRH】------node中的常用核心模块及方法
常用的5个核心模块
http url querystring fs events
1. http
http.createServer 创建服务器, 回调函数中有2个参数 1、req:request() 请求,只能在服务端看到 2、res:response() 给客户端的回复,在客户端看到 req参数: req.url 获取请求的地址 eg:http://www.baidu.com/api/list?a=23&b=f,则req.url为/api/list req.method 请求的方式get/post res参数: res.end 结束回复 ,向客户端发送最后一次信息(必须的,否则服务器就会一直运行) res.statusCode 设置状态码 该属性控制响应头刷新时将被发送到客户端的状态码。 res.write() 回复内容 res.writeHead() 设置状态码和返回文件的类型 res.setHeader() 设置返回文件的类型 http.get(url,(res)=>{})//请求数据 参1:请求的地址,不能以https开头 参2:回调函数,参数为responose res.statusCode获取服务器响应的状态码,200代表成功 res.on("data",(data)=>{ }) res.on("end",()=>{})
创建服务器
//引入核心模块http const http = require('http'); //创建服务器 http.createServer((req,res)=>{ //设置请求成功的状态码,类型,charset=utf8解决乱码问题 res.writeHead(200,{"content-type":"text/plain;charset=utf8"}); //向客户端发送最后一次信息(必须的,否则服务器就会一直运行) res.end("还好"); }).listen("3000")//设置端口号 最简单的服务器,在终端运行js文件(node 文件名),在浏览器中输入localhost 端口号,即可
请求数据
const http = require("http"); const cheerio = require("cheerio"); const fs = require("fs"); //http.get()不能请求以https://开头的路径 http.get("http://www.mobiletrain.org/?pinzhuanbdtg=biaoti", (res) => { //判断是否请求成功(res.statusCode获取响应的状态码,200代表成功) if (res.statusCode == 200) { let str = ""; //当获取到数据的时候会对数据进行一块一块的接收 res.on()为绑定事件的方法 data是事件,回调函数中的data为接收到的每块的数据 res.on("data", (data) => { str += data; }) //end为事件,res 是个writable的流,当writable流接收到 null 的时候会触发 end 事件即给客户端的东西写完了,可以发送给客户端了 res.on("end", () => { //将字符串加载到$符号中这样就可以用来操作元素 let $ = cheerio.load(str); let list = $(".ul1").children(); let data = ""; for (var i = 0; i < list.length; i++) { data += list.eq(i).find("span").text() + "\n"; } fs.writeFile("./data.txt", data, () => {}) }) } })
2 url
u
rl.parse() 将一个url转换成一个urlObject 参1:url 参数2:是一个布尔值 如果填true的话,会将query字符串解析成query对象 地址栏中?后面的部分是query的部分 url.format() 将一个url Objet转换一个url url.resolve() 生成一个相对路径或者绝对路径 console.log(url.resolve("/a/b/c","/d"))//绝对路径 将所有的都替替换,结果为:/d console.log(url.resolve("/a/b/c","d"))//生成相对路径 只将最后一个替换,结果为:/a/b/d
3 querystring
querystring.parse() 将字符串转换为对象 参数1 字符串 参数2 分割符 参数3 赋值符 querystring.stringify() 将对象转换成字符串(是转义后的字符串,需要进行反转义) 参数1 对象 参数2 分割符 参数3 赋值符 querystring.escape()转义 name = a=b=c key val name=a=b = c key val querystring.unescape() 反转义 eg: const querystring = require("querystring"); let str = "name+李想*age+18*sex+美女"; let obj = querystring.parse(str,"*","+"); //console.log(querystring.stringify(obj,"%","$")) let str1 = "a=b=c"; let val = querystring.escape(str1); let key = "name="+val; console.log(querystring.unescape(val))
4 fs {读取到的文件默认是buffer类型)
const fs = require("fs"); stat:检查文件的类型 fs.stat("./002url.js",(err,starts)=>{ starts.isFile()//判断当前文件是否是一个文件 starts.isDirectory():判断当前文件是不是一个目录 }) ----------------------------- eg: fs.stat("./002url.js",(err,starts)=>{ console.log(starts.isFile()) console.log(starts.isDirectory()) }) ------------------------------------------------ fs.mkdir();创建文件夹 参数1:文件路径 参数2:回调 ----------------- eg: fs.mkdir("./abc",(err)=>{}) fs.mkdirSync() 同步 -------------------------------------------------------- fs.writeFile(); 创建并写入文件 参数1:文件路径 参数2:写入文件的内容 参数3 回调() fs.writeFile("./abc/data.txt","1234",()=>{}) ---------------------------------- fs.readFile() 参数1:文件路径 参数2:回调 有两个参数,err data fs.readFile("./abc/data.txt",(err,data)=>{ console.log(data+""); }) Sync:同步 //console.log("1111") //读取到的文件默认是buffer类型 ------------------------------------------------ fs.rename() 重命名 fs.rename("./data.txt","./page.txt",(err)=>{}) --------------------------------------------------------- fs.readdir():列出文件的目录 参数1:文件路径 参数2:回调函数 err list fs.readdir("../demo",(err,list)=>{ console.log(list) })
5 events
//引入了核心模块 const EventEmitter = require("events"); //继承了EventEmitter当前类的属性和方法 class MyEmitter extends EventEmitter{}; //实例化 const myEmitter = new MyEmitter(); on:绑定事件 参数1:事件名称 参数2:回调函数(事件对应的函数) emit:触发事件及事件对应的方法 参数1:事件名称(要和on绑定的事件一致) 参数2:需要传递的参数 once:绑定事件,但仅能触发一次方法 removeListener() 解除绑定 参数1:事件名称 参数2:解绑的函数 removeAllListeners()解绑全部 参数1:事件名称 --------------------------------------------------------- eg: //引入了核心模块 const EventEmitter = require("events"); //继承了EventEmitter当前类的属性和方法 class MyEmitter extends EventEmitter{}; //实例化 const myEmitter = new MyEmitter(); function fn(val){ console.log("李"+val); } function fn1(val){ console.log("朱"+val); } function fn2(val){ console.log("程"+val); } myEmitter.on("change",fn); myEmitter.on("change",fn1); //把当前事件放在队列的最前面优先执行 myEmitter.prependListener("change", fn2);