http 模块
-
作用
Nodejs提供了http模块,用来构建服务器
-
引入方法
const http = require("http");
-
功能API
-
http.Server 类
用于创建HTTP服务器,使用时需要先实例化;
-
http.ClientRequest 类
该对象在 http.request() 内部被创建并返回。它表示着一个正在处理的请求;
-
http.IncomingMessage 类
IncomingMessage对象由 http.Server 或 http.ClientRequest 创建,并作为第一个参数分别传递给 'request' 和 'response' 事件。 它可以用来访问响应状态、消息头、以及数据。它实现了可读流接口;
-
http.ServerResponse 类
ServerResponse对象由http.Server创建,并作为第二个参数传递给 'request' 事件。它实现了可写流接口;
-
http.createServer( [callback] )方法
返回一个http.Server对象,callback会被自动添加到 'request' 事件中;
-
http.request( options[, callback] )方法
作为http客户端,向服务器发送请求,可选参数callback会被自动添加到 'response'事件中;
-
http.get( options[, callback] )方法
http.request()方法的简化版,主要区别是http.get()自动将请求方法设为了"GET",同时不需要手动调用req.end();
-
-
创建服务器
-
获取http.Server对象:
var server = new http.Server();
-
创建服务器,并监听3000端口:
server.on("request",callback).listen(3000)
简化版:
利用createServer()方法。
http.createServer(callback).listen(3000)
-
-
callback
在创建服务器中,输入的回调函数很有讲究,callback的参数:req、res
-
req:请求对象
callback = function(req,res{ // http协议版本,值可能为1.1或1.0 console.log(req.httpVersion); // 请求的方法。"GET"或者"POST" console.log(req.method); // http响应状态码 console.log(req.statusCode); // http响应状态消息 console.log(req.statusMessage); // 请求头或响应头的对象 console.log(req.headers); // 发送http请求的客户端的url console.log(req.url); })
-
res:响应对象
-
res.writeHead()
res.writeHead(statusCode[, statusMessage][, headers])
向请求的客户端发送响应头
- 向请求的客户端发送响应头,该函数在一个请求中最多调用一次,如果不调用,则会自动生成一个响应头。
- statusCode是一个三位数的http状态码,如“200”表示请求成功、“404”表示请求的资源不存在。
- statusMessage是一个字符串,用来描述状态。
- headers是一个对象,即响应头。
-
res.write()
res.write(chunk[, encoding][, callback])
-
向请求的客户端发送响应体。
-
在end()方法被调用前可以多次调用。
-
chunk是一个buffer或者字符串,如果chunk是字符串,则在第二个参数需要指定编码方式,默认为utf-8。
-
-
res.end()
res.end([chunk][, encoding][, callback])
-
该方法会通知服务器,所有响应头和响应主体都已被发送。
-
每次响应都必须调用end()方法来结束。
-
-
ServerResponse对象包含的事件、方法以及属性参考手册:
http://nodejs.cn/api/http.html#http_class_http_serverresponse
http.Server类的事件参考手册:
-
path 模块
-
作用
路径的拼接
-
引入方法
const path = require("path");
-
功能API
join => 路径拼接
resolve => 将参数转换为绝对路径
-
使用
console.log(path.join(__dirname,"index.js")); console.log(path.resolve(__dirname,"index.js"))
events 模块
-
作用
events对象作为一个事件侦听抛发机制
-
引入方法
events是一个类,不能直接实例化,所以要先创建一个新类来继承它,然后再实例化使用
const EventEmitter = require("events"); class MyEventEmitter extends EventEmitter{}; const myEventEmitter = new MyEventEmitter();
-
功能API
on => 事件侦听
once => 侦听只执行一次的函数
emit => 事件抛发
removeListener => 移除一个事件
removeAllListeners => 移除所有事件
-
使用
function fn1(val) { console.log(111, val) } function fn2(val) { console.log(222, val) } function fn3(val) { console.log(333, val) } myEventEmitter.on("Event0",fn1) myEventEmitter.on("Event0",fn2) myEventEmitter.on("Event0",fn3) myEventEmitter.removeListener("Event0",fn2); // myEventEmitter.removeAllListeners("Event0"); myEventEmitter.emit("Event0","hello")
fs 模块
-
介绍
fs对象用来操作本地文件
语法与Linux相似
-
引入方法
const fs = require("fs");
-
功能API与使用方法
-
fs.mkdir => 创建文件夹
fs.mkdir(path.resolve(__dirname,"./demo"),(err)=>{});
-
fs.rmdir => 删除文件夹
fs.rmdir(path.resolve(__dirname,"./demo"),(err)=>{});
-
fs.stat => 判断文件类型
fs.stat("./index.js",(err,data)=>{ console.log(data.isDirectory()); console.log(data.isFile()); })
-
fs.writeFile => 创建文件并写入文件
fs.writeFile(path.resolve(__dirname,"./demo/index.txt"),"abc",(err)=>{})
-
fs.unlink => 删除文件
fs.unlink(path.resolve(__dirname,"./demo/list.txt"),()=>{})
-
fs.readFile => 读取文件
fs.readFile(path.resolve(__dirname,"./demo/index.txt"),(err,data)=>{ console.log(data+""); })
-
fs.rename => 重命名文件或文件夹
fs.rename(path.resolve(__dirname,"./demo/index.txt"),path.resolve(__dirname,"./demo/list.txt"),(err)=>{})
-
fs.readdir => 列出文件夹中的所有文件
fs.readdir(path.resolve(__dirname,"../../新建文件夹"),(err,list)=>{ console.log(list) })
-
querystring 模块
-
介绍
querystring 可以将类似 a=1&b=2&c=3 格式的字符串转换为可以操作的对象
-
引入方法
const qs = require("querystring");
-
功能API与使用方法
-
qs.parse => 将字符串转换为对象
var str = "name=alley&age=20"; var obj = qs.parse(str); console.log(obj); // {name:alley,age:20}
parse()中的参数:
参数1:字符串
参数2:分隔符
参数3:赋值符
非常规符号的字符串的转化需要用到第二个和第三个参数:
var str = "name*alley#age*20"; var obj = qs.parse(str,"#","*"); console.log(qs.stringify(obj,"@","!"))
-
qs.stringify 将对象转换为字符串
var obj = {name:alley,age:20}; console.log(qs.stringify(obj) //"name=alley&age=20"
stringify() 中的参数:
参数1:对象
参数2:分隔符
参数3:赋值符
非规则符号的处理与parse()方法相同
-
qs.escape() 转义 (与encodeURIComponent的转义结果一模一样)
var str = "name=alley&age=20" var key = qs.escape(str); console.log(key) // name%3Dalley%26age%3D20
-
qs.unescape() 反转义 (同decodeURIComponent)
var str = 'name%3Dalley%26sex%3D20' var key = qs.unescape(str); console.log(key) // name=alley&sex=20
-
url 模块
-
介绍
url处理url 完美
-
引入方法
const url = require("url");
-
功能API与使用方法
-
url.parse() => 将一个url转换为一个url对象
const path = "https://www.baidu.com/s?wd=%20node%20request%20post%E8%AF%B7%E6%B1%82&rsv_spt=1&rsv_iqid=0xb9778e3c000b4a9e&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&oq=request%2520post%25E8%25AF%25B7%25E6%25B1%2582&inputT=1575&rsv_t=3da2Tn%2F7uIuHWTsROFo6yvwMvultNv5wmOTlrQiVQ6KLFbNtnrLXkdd9HWuhNlyq7zNM&rsv_pq=feaadbf200091d61&rsv_sug3=35&rsv_sug2=0&rsv_sug4=2259"; const urlObject = url.parse(path,true); console.log(urlObject); // 得到了一个包含各种属性的Url对象
-
url.format() => 将一个urlObject转换成一个url字符串(反向url.parse)
console.log(url.format(urlObject)); // 讲上文转换的对象变成了url字符串
-
url.resolve() => 转换绝对路径和相对路径
console.log(url.resolve("/a/b/c","d")); // /a/b/d console.log(url.resolve("/a/b/c","/d")); // /d
-
持续更新...
网友评论