01-认识node

134 阅读3分钟

coderwwh——w:what——w:why——h:how

最近在学习网上的课程,
但是不是人家的接口不维护了,就是限制了各种东西,
总之学的过程中,很多地方都受限制,感觉很不爽!
于是下定决心,把node学会,自己搭了后台,再继续做那些个项目。

node基础


node是什么

Node.js是一个基于V8 JavaScript引擎的JavaScript运行时环境。

基于V8,但是不只有V8引擎:

图片.png

传递参数

全局对象 process

console.log(process);

node .\demo.js data1 data2

图片.png

全局对象

特殊的全局对象

  • __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看成一个存储二进制的数组,数组的每一项,可以保存八位二进制

图片.png

const msg = "hello"
const buffer = new Buffer(msg)

const buffer = Buffer.from(msg)

文件操作

创建过程

http模块

什么是web服务器

  当应用程序(客户端)需要某一个资源时,
  可以向一个台服务器,通过Http请求获取到这个资源;提供资源
  的这个服务器,就是一个Web服务器;

图片.png

怎么用?创建


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

响应状态码

图片.png

...
//设置状态码,给属性赋值,和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