Nodejs知识点
1.缓冲器buffer
1.buffer大小固定且性能稳定
2.创建buffer过程:
let b1 = Buffer.alloc(20)//直接开辟一块20字节的内存空间,默认值为0
let b2 = Buffer.allocUnsafe(20)//创建了一个20字节的空间,不过可能存在旧数据
let b3 = Buffer.from('hahaha')//开辟空间,存储内容为hahaha
3.buffer的读取
console.log(b3.toString())//输出hahaha
console.log(b3[2])//输出制定位置数据
2.fs文件模块
1.模块导入
const fs = require('fs')
2.文件写入
//异步写入
fs.writeFile(./haha.txt,data[,options],callback)
//同步写入(类似异步写入,没有回调函数,推荐异步写入)
//追加写入(分异步和同步,同步没有回调)
fs.appendFile(file,data[,options],callback)
//流式写入
let ws = fs.createWriteStream('./123.txt')
ws.write = ('abcd\r\n')
ws.write = ('abcd\r\n')
ws.end()
3.文件读取
fs.readFile(path[,options],callback)
//上述是同步读取,能够在options中设置读取文件的编码格式,异步读取没有回调函数
let ws = fs.createReadStream('./hhh.txt')
ws.on('data',data=>{
console.log(data)
})
ws.on('end',()=>{
console.log('read over')
})
//流式读取每读出64k数据执行一次data回调,读取完毕之后,执行end回调
4.其他操作,rename(重命名),unlink(删除),mkdir(创建文件夹),readdir(读取文件夹),rmdir(删除文件夹)——使用“__dirname”可以保存当前绝对路径
3.npm前期操作
1.npm i -g全局安装,npm i本地安装,npm r 局部删除,npm start运行
2.常用的是express开发框架,搭建步骤如下
//install express
npm init
npm i express
//nodejs
const express = require('express')
const app = express()
app.get('/home',(req,res)=>{
res.send('success')
})
app.listen(3000,()=>{
console.log('3000 is listening')
})
4.路由
1.路由确定了应用程序如何相应客服端对特定端点的请求
const app = express()
app.get('./home',(req,res)=>{
//获取路由参数
res.send('index page 's id ='+req.params.id)
//原生HTTP报文获取方式
console.log(req.method)
console.log(req.url)
console.log(req.httpVersion)
console.log(req.headers)
//express方便的报文获取方式
console.log(req.query)
//获取指定的请求头
console.log(req.get('host'))
})
app.all('*',(req,rees)=>{
res.send('<h1>404 not found</h1>')
})
app.listen(4000,()=>{
console.log('3000 is listening')
})
5.中间件
1.中间件本质上是一个回调函数去访问req和res,对公共操作进行一个封装
let Midware = function(req,res,next){
//中间件的功能代码
next()//对全局路由进行依次回调
}
app.use(Midware)//执行中间件
2.静态资源中间件
//index.html为静态默认打开资源
app.use(express.static('./public'))
3.使用body-parser处理请求体数据(有更好的解析作用)
//导包
npm i body-parser
const bpr=require('body-parser')
//处理queryString格式的请求体
let urlPar = bodyParser.urlencoded({
extended:false
})
//处理json格式的请求体
let jsonParser = bodyParser.json()
app.post('/home',urlParser,(req,res)=>{
//获取请求体数据
console.log(req.body)
//获取请求体用户名
console.log(req.body.username)
//获取密码
console.log(req.body.userpass)
res.send('get message')
})
4.router的使用:是一个完整的中间件和路由系统 ,能够对路由进行模块化,更好的进行管理
//从express中导入创建router(设当前文件夹为route/testRouter.js)
const router = express.Router()
//设置内部路由
router.get('/',(req,res)=>{
res.send('first page')
})
//设置内部路由
router.get('/home',(req,res)=>{
res.send('second page')
})
//暴露模块
module.exports = router
///////////////////////
//在主文件中创建app
const app = express()
//导入路由文件
const testRouter = require('./route/testRouter')
//应用router
app.use(testRouter)
//完结程序
app.listen(3000,()=>{
console.log('3000 is working with router')
})
6.HTTP协议
1.超文本传输协议,主要内容是:客户端(用来想服务器发送数据,被称为请求报文),服务端(想客户端返回数据,称为响应报文)
2.请求报文的组成
//请求行:请求方法、请求URL、HTTP协议版本号
//请求头:
//请求体:可以为空(GET),或者是字符串或JSON格式(POST)
3.响应报文的组成
//响应行:HTTP版本号、响应状态码、响应状态描述
//响应头:
//响应体:一般为HTML文件内容
4.一些注意事项:
//响应内容中文乱码的解决方法
response.setHeader('content-type','text/html;charset=utf-8')
5.GET常用环境:地址栏直接输入url进行访问、a链接、link标签引入样式或src引入js或引入图片、form中的方法为get、ajax的get请求
6.POST常用环境:form中的方法为post、ajax的post请求
7.get和post的区别:
(1)GET主要是用来获取数据;POST主要是用来提交数据;
(2)GET带参数请求是将参数放在url之后;POST带参数请求是将参数放进请求体中;
(3)POST相对安全;
(4)GET请求有大小限制;POST通常没有限制
7.模块化
1.将程序文件拆分成多个文件的过程,能够防止命名冲突,具有高复用性和高维护性
2.操作步骤
child:
function BeImported(){
xxx
}
module.export = BeImported
//exports.name = BeImported
////////////
dad:
const BId=require('BeImported')
BeImported()
8.会话控制——cookie
1.cookie是保存在浏览器端的一小部分数据,是按照域名来保存的,就类似cookie会长期保存在请求头中一样
2.实现
//导入并设置cookie中间件
const cookieParser = require('cookie-parser')
app.use(cookieParser())
//设置cookie
app.get('/set',(req,res)=>{
res.cookie('username','du')
//设置具有时效的cookie
res.cookie('account','123456',{maxAge:5*60*1000})
res.send('is set')
})
//读取cookie
app.get('/get',(res.res)=>{
console.log(req.cookie)
res.send('is get')
})
//删除cookie
app.get('/delete',(req,res)=>{
res.clearCookie('username')
res.send('have been removed')
})
app.listen(4000,()=>{
console.log('4000 is using..')
})
9.会话控制——session
1.session是保存在服务端的数据,保存当前用户的相关信息
2.原理:通过创建唯一的sessionID,来去查找对应的cookie,然后根据对应cookie来确定用户
3.和cookie的区别:
(1)session存在服务端,cookie存在客户端
(2)session安全性较好
(3)session数据存在服务器,只需通过cookie传递sessionID,运输效率不受影响;cookie太多则会影响传输效率
(4)session没有存储限制;cookie不能超过4K
10.接口
1.一个接口就是服务器中的一个路由规则,API接口
2.组成:通常由请求方法、接口地址、请求参数、响应结果组成
3.RESTful API:是一种特殊风格的接口,特点如下:
(1)URL中的路径表示资源,路径中不能有动词
(2)操作资源要与HTTP请求方法相对应
(3)操作结果要与HTTP响应状态码对应