Nodejs知识点学习总结

本文介绍了Node.js中的Buffer类,包括创建与读取方法。讨论了fs模块的文件读写操作,如writeFile、appendFile和readFile。提到了npm的基本操作和Express框架的使用,包括路由处理和中间件。还概述了HTTP协议的基本结构以及GET和POST的区别。此外,文章还涉及了模块化编程和会话控制,如cookie和session的使用,最后讨论了接口和RESTfulAPI设计原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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响应状态码对应

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值