概念:
Koa是基于nodejs平台的下一代web开发框架
- Express原班人马打造
- Async+await处理异步
- 中间件机制
一些简单的内置模块
- 引用http模块(引入)
var http = require('http'); // 搭建服务
- 简单的创建一个服务器 回掉函数表示接收到请求之后做的事情,然后返会服务实例:
var server = http.createServer(function(request,response){ //: 返回服务对象
//request 指的是请求
//response 指的是响应
1) request.url { 请求路径
根据不同的请求路径,我们服务端做不同的处理 ,相应不同的结果
根据不同的接口,做出不同的服务(响应不同内容)
}
2) response.writeHead(
第一个参数 : 状态码
第二个参数 : 响应头
需要在end之前写这些东西
) **** 设置一个响应头
3) response.end(
第一个参数 : 字符串 响应的内容
第二个参数 : 回掉函数
) ***** 完成发送响应 必写项
})
- 监听端口
server.listen((3000 :端口),('127.0.0.1' :端口号 地址), | 回掉函数 function(err){
1) if(err) throw err : 抛出错误
throw:抛出错误
})
***** 缓冲器 buffer
- url模块
var {URL} = require('url');
var newurl = new URL('参数是顶级表单信息');
1) url.parse(
参数一 : 要解析的URL字符串
参数二 : (默认false)如果是true 那么就可以将所有的查询变为***对象*** 就直接可以得到这个参数
)
2) url.parsing(
'http://user:[email protected]:8080/p/a/l/a?query=string#hash'
href : user:[email protected]:8080/p/a/l/a?query=string#hash
protocol : http
slashes:是否有 斜线//
host : 主机名host.com:8080
auth : 用户
query : 查询部分
hash : url中的锚点部分
)
3) newurl.searchParams.get('callback') searchParams.get方法拿到了 callback的值 例如 'callback=nb' function nb(data){console.log(data)}
4) new URLSearchParams(str.toString(utf-8)) 实例化查询字符串 把查询字符串变成对象 可以通过get()获取到 对应的value;
看图明了:
5:querystring模块 :字符串查询 不常用
querystring.parse(
第一个参数: 接收字符串 返回查询对象 string***
第二个参数:默认 &
第三个参数:默认 =
第四个参数:object***
1:decodeURLComponent 把乱码解析成文字 默认querystring.unescape()
2:maxKeys 指的是要解析键值的最大数量 默认1000
)
- fs模块
1) fs.readFile(path,encoding,function(err,data){
1_ path : 文件路径
2_ encoding : 编码格式
3_ 第三个参数 : callback{
err : 如果报错
data : 数据流
}
})
2) fs.mkdir ('文件夹位置',callback) 创建文件夹
3) fs.stat('./ann/aaa',function(err,data){
stat 检测状态
data.isDirectory() : 返回布尔值 只返回true 检测这个路径, 是不是一个文件夹
})
4) 文件检测
fs.readdir('./ann',function(err,files){
files:是文件名的数组,不是文件的数组 表示./ann中的所有东西
console.log(files)
})
5) fs.writeFile(路径,数据,回掉函数(err))
6) fs.open(路径,回掉函数(err)) 判断路径是否存在
1.callback(err, fd)
1) .fd: 返回表示文件描述符的整数
2) .err: 报错比fd有用
1).err.code === 'EEXIST' // 表示存在
2).err.code === 'ENOENT' // 表示不存在
7) 关闭文件
异步
fs.close(fd, callback)
fd: 文件描述符
callback(err)
同步
fs.closeSync(fd)
(附加) fd: 文件描述符
1.概念: 在操作系统中每个打开的文件会被分配一个数字的标识,文件操作使用了这些文件描述符来识别和追踪每个特定的文件,
2.在nodejs中,每操作一次文件后,文件描述符就会递增1,并且从3开始
0: 标准输入 process.stdin
1: 标准输出 process.stdout
2: 错误输出 process.stderr
8)创建可读流
fs.createReadStream(path[, options]);
1.path: 文件路径
2.flags: 默认值 r
3.encoding: null
4.mode: 默认值: 0o666
5.autoClose: true
6.start
1.可以包括 start 和 end 值,以从文件中读取一定范围的字节而不是读取整个文件。 start 和 end 都包含在内并从 0 开始计数,允许的值在 [0, Number.MAX_SAFE_INTEGER] 的范围内.。如果指定了 fd 并且 start 被省略或 undefined,则 fs.createReadStream() 从当前文件位置开始顺序读取。
2. encoding 可以是 Buffer 接受的任何一种字符编码。
7.end: 默认值: Infinity
*************创建文件 **pipe 流(stream).pipe()
9)创建可写流
fs.createWriteStream(path[, options])
1.path: 文件路径
2.flags: 默认值 r
3.encoding: null
4.mode: 默认值: 0o666
5.autoClose: true
6.start
1.可以包括 start 和 end 值,以从文件中读取一定范围的字节而不是读取整个文件。 start 和 end 都包含在内并从 0 开始计数,允许的值在 [0, Number.MAX_SAFE_INTEGER] 的范围内.。如果指定了 fd 并且 start 被省略或 undefined,则 fs.createReadStream() 从当前文件位置开始顺序读取。
2. encoding 可以是 Buffer 接受的任何一种字符编码。
7.end: 默认值: Infinity
10) mode: 文件模式
7: 可读可写,可执行
6: 可读可写
5: 可读可执行
4: 只读
3: 可写可执行
1: 只执行
- path模块
let path=require(‘path’) 获取文件路径
path.extname(url) 获取url后缀名
path.parse() 方法返回一个对象,其属性表示该对象的重要元素path
path.format() 方法从对象返回路径字符串。
path.join() 方法path使用特定于平台的分隔符作为分隔符将所有给定段连接在一起,然后规范化生成的路径。零长度path段被忽略。如果连接的路径字符串是零长度字符串,’.'则将返回,表示当前工作目录
- MIME
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。 是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。 多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
···MIME类型看下篇博客···
- JSONP
JSONP是想跨域去请求服务端的数据
**动态创建script标签
模板{
funciton jsonp(url,clName){
let script = document.createElement('script')
script.src = url + '?callback' + clName;
document.body.appendChild(script)
script.onload = function(){
console.log(1)
}
}
jsonp('http://127.0.0.1:3000',nb)
}
function nb(data){
console.log(data)
}
1·需要一个客户端 一个服务端
2·必须违反同源策咯:同域名,同端口 同协议
3·通过script标签的src像不同的服务器请求数据
4·src:它是一种资源请求,不存在跨域
5·script标签:她导入的是js,并且会将js执行一遍
跨域问题延伸
// 接受任意域名的请求
res.setHeader("Access-Control-Allow-Origin", "*");
// 表明服务器支持的所有头信息字段
res.setHeader("Access-Control-Allow-Headers", "X-Requested-With, Content-Type");
// 用来列出浏览器的CORS请求会用到哪些HTTP方法
res.setHeader("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
// 指定本次预检测请求的有效期
res.setHeader("Access-Control-Max-Age", 50);