Node.js
尚硅谷nodejs笔记
cd .. 返回上一级目录
fs模块
---------------------------------------- 写入文件---------------------------------------
1.导入fs模块
const fs = require('fs');
2.写入文件
fs.writeFile()
回调函数中接受一个参数,一般将其命名为err , 如果文件写入失败则err为错误对象,成功则为null
如果写入失败,err为true
fs.writeFile是异步执行,而fs.writeFileSync是同步执行
--------------------文件追加写入--------------------
使用appendFile , 格式与writeFile差不多
想要换行: \r\n
------------------文件流式写入---------------------
使用createWriteStream
--------------------文件读取-------------------------
流式读取文件
每读取一小块文件,绑定data事件中的那个回调函数就会执行一次
请求报文 :
请求行:
请求方法 , url , http版本号
请求头结构 :
键名 : 键值
请求体可以是空,也可以不空
响应报文:
响应行,响应头,空行,响应体
响应行 : http版本号,状态码,状态描述
响应头:格式同请求头
URL
ip
端口
创建http服务端
1.引入http
const http = require('http')
2.创建服务对象
const server = http.createServer((request,response)=>{
response.end('Hello') //设置响应体
})
当请求报文发过来时,这个回调函数就执行
3.监听端口,启动服务
server.listen(9000,()=>{
console.log('服务启动')
})
如果响应体想要是中文,则需要添加:
设置响应报文
end里可以接受字符串和buffer
网页资源加载
网页在加载过程中会向服务端发送多次请求(html,css,js等等)
网页引入外部资源
EXPRESS
发post请求的两种方式
AJAX , 表单
创建路由有三种
app.get
app.post
app.all
* 的意思是如果所有的路由都不匹配则选择这条
express查询请求报文
获取路由参数
可以用/:(参数名) 来确定路由参数
获取路由参数 : req.params.参数名
如req.params.id
express响应设置
新
process模块
宏任务队列和微任务队列见js复习
2.path和fs模块
resolve
第一个参数为绝对路径,第二个参数为相对路径,resolve会把他们拼接起来
绝对路径一般为__dirname , 返回当前工作目录的绝对路径
fs模块
fs.readFile() 异步读取文件并以buffer形式返回
fs.readFile(path.resolve(__dirname,'./hello.js'),(err,result)=>{
if(err){console.log('出错');}
else{console.log(result.toString();)}
})
3.Npm
url由 协议名,域名,网站资源路径组成
1.DNS解析,DNS的作用是通过域名来找到对应的IP地址
2.浏览器和服务器建立连接
客户端和服务器建立连接(或者说TCP/IP连接):三次握手
客户端向服务器发送连接请求(SYN),服务器收到消息并向客户端返回同意连接消息(SYN,ACK),客户端向服务器发送同意连接消息(ACK)
客户端和服务器断开连接:四次挥手
客户端向服务器发送断开连接请求(FIN),服务器收到请求并向客户端发送消息(ACK),连接断开后服务器向客户端发送消息(数据接收完毕,可以断开)(FIN ACK),客户端向服务器发送消息可以断开了(ACK)
请求报文和响应报文
发数据:从上到下 收数据:从下到上
4.http协议
请求报文和响应报文
请求行:
只要是http协议,无论是get还是Post安全性都不好
如果是想向服务器发数据,能用Post就尽量用post
get通过查询字符串发送数据,而post通过请求体发送数据,请求体可以是任意大小的数据,而查询字符串大小有限
请求头
响应行
响应头
服务器的作用:
4.express
路由的作用
中间件和路由的区别
中间件如果不匹配路径则自动对应到所有路由
中间件的回调函数有第三个参数next方法
如果一个中间件,不设置next()的话会导致:
5.静态资源
服务器内的代码对外部来说都是不可见的,比如说我写了一个html网页,浏览器不能直接访问它
如果想要外部可见,则需要将它的工作目录设置为静态资源目录
app.use(express.static(文件工作目录))配置静态资源路径
设置static中间件后,浏览器访问时会自动去这个静态资源目录中找
6.get请求传递参数的两种方式
查询字符串 , params
7.当我们用表单提交数据的时候一定优先使用post方式
8.错误路由配置
可以在所有路由的最后设置一个中间件来处理访问失败情况下的返回情况
这个中间件写在所有路由的最后面,表示如果这个中间件执行,则上面所有的路由都没有匹配,也就是失败
因为这个中间件没有写路径,所以它自动对应所有路由,即所有的请求都会执行这个中间件
9.模版引擎
html页面属于静态页面,创建的时候是什么样子,用户看到的就是什么样子,不会跟随服务器中的数据变化
模板引擎的作用:长得像网页,但是可以嵌入变量
使用ejs:
1.安装enj
2.将ejs设置为默认的模板引擎
3.配置模板路径
一般会创建一个叫views的文件夹放模板引擎的文件,ejs的文件都以.ejs结尾
4.在ejs文件中写html代码
5.在路由中使用res.render()来渲染模板引擎并将其返回给浏览器
6.在ejs文件中可以用<%= %>来引入render里面导入的数据
<%= %>会自动对字符串中的特殊符号进行转义
<%- %>会直接输出内容
<% %>可以在其中写JavaScript代码
使用<%= %>而不使用<%- %>的原因:防止xss攻击
7.直接在路由中渲染ejs可能会导致表单重复渲染问题
8.cookie
给客户端发一个cookie :
cookie有效期
9.session
10.rest
11.postman
一个用来发数据的工具,可以测试api
12.ajax
ajax中向服务器发请求有三种方式
xml fetch axios
13.跨域
发送请求时由于ajax是异步的,所以我们可以给xhr对象绑定一个load事件,这个函数会在异步执行完后再执行
fetch
return res.json()返回一个promise
fetch()函数有两个参数,第一个是资源路径,第二个是配置对象
14.本地存储
处理登录问题时,之前我们用的都是cookie或者session,但是rest服务器是跨域的,这两用不了
16.axios
