coderwwh——w:what——w:why——h:how
最近在学习网上的课程,
但是不是人家的接口不维护了,就是限制了各种东西,
总之学的过程中,很多地方都受限制,感觉很不爽!
于是下定决心,把node学会,自己搭了后台,再继续做那些个项目。
node基础
node是什么
Node.js是一个基于V8 JavaScript引擎的JavaScript运行时环境。
基于V8,但是不只有V8引擎:
传递参数
全局对象 process
console.log(process);
node .\demo.js data1 data2
全局对象
特殊的全局对象
-
__dirname
-
__filename
常见的全局对象
-
process
-
console
-
定时器函数(本质上就是函数
-
global
常见内置模块
path
获取路径信息:path.dirname
获取文件名字: path.basename
获取后缀名:path.extname
路径拼接
- join
- resove
- 区别:resove会判断拼接的路径字符串是否有/./../开头的路径
fs文件系统
- 3种方式
- 同步操作Sync,代码会阻塞,不会继续执行
- 异步回调函数,不会阻塞,需要传入回调函数,获取到结果时,回调函数执行
- 异步Promise,不会阻塞,fs.promise,返回一个promisemm,then,catch处理
文件描述符
文件的读写
const conent = "xxx"
fs.writeFile("./xxx.txt", conent, { flag: "a" }, err=>{
console.log(err)
})
fs.readFile("./xxx.txt", {encoding: "utf-8"}, (err, data)=>{
console.log(data)
})
文件夹操作
const dirname = "./xxx"
创建
if(!fs.existsSync(dirname)){
fs.mkdir(dirname, err => {
console.log(err)
})
}
读取文件夹中的文件
fs.readdir(dirname,(err,files)=>{
console.log(files)
})
重命名
events
buffer
为什么有这个东东
计算机中所有的东东,最终都是用二进制表示,但是js通常只会处理直观的东东,字符串什么的
怎么做,怎么存的尼?
buffer看成一个存储二进制的数组,数组的每一项,可以保存八位二进制
const msg = "hello"
const buffer = new Buffer(msg)
const buffer = Buffer.from(msg)
文件操作
创建过程
http模块
什么是web服务器
当应用程序(客户端)需要某一个资源时,
可以向一个台服务器,通过Http请求获取到这个资源;提供资源
的这个服务器,就是一个Web服务器;
怎么用?创建
const http = require('http')
//=================================================
const serve = http.createServer((req,res) => {
})
//server.listen(8001,'localhost')
server.listen(8001, '0.0.0.0', () => {
console.log("8001 OK")
})
//=======================================================
const server2 = new http.Server((req,res) => {
})
server2.listen(8002, '0.0.0.0', () => {
console.log("8001 OK")
})
//=======================================================
热更新
nodemon
listen
request
URL
url模块
querystring
这两个是帮助我们解析路径的
method
判断POST,拿到body里的数据,原生这里,是没有res.body的
...
if(req.method === 'POST'){
req.setEncoding('utf-8')
req.on('data',(data) => {
const { uname, upwd } = JSON.parse(data)
})
}
...
headers
{
'user-agent': '',
'content-type': 'text/plain',
accept: '*/*',
host: '127.0.0.1:8001',
'accept-encoding': 'gzip, deflate, br',
connection: 'keep-alive',
'content-length': '31'
}
contenlype是这次请求携带的数据的类型:
- application/json表示是一个json类型;
- text/plain表示是文本类型;
- application/xml表示是xml类型;
- multipart/fonrrdata表示是上传文件;
content-length :文件的大4厢长度
keep-alive :
-
http是基于TCP协议的,但是通常在进行一次请求和响应结束后会立刻中断;
-
在http1.0中,如果想要继续保持连接:
浏览器需要在请求头中添加connection: keep-alive ; 服务器需要在响应头中添加connection:keey-alive ; 当客户端再次放请求时,就会使用同一个连接,直接一方中断连接; -
在http1.1中,所有连接默认是 connection: keep-alive的;
不同的Web服务器会有不同的保持keep-alive的时间; Node中默认是5s中;
response
响应状态码
...
//设置状态码,给属性赋值,和head一起设置
res.statusCode = 404
res.writeHead(404)
...
响应的header
content-type
http发送网络请求
const req = http.request({
method: 'POST',
hostname,
port,
}, (res) => {
res.on(...)
})
http文件上传
本质是表单提交,就是一个POST
- form-data
- x-www-form-urlencoded
- raw