Node.js与前端开发实战 | 青训营笔记

109 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第2天

笔记大纲

  1. Node.js的应用场景
  2. Node.js运行时结构
  3. 编写Http Server
  4. 个人总结
  5. 参考资料

详细介绍

Node.js的应用场景

1. 前端工程化(难以替代)

  • Bundle:Webpack,vite
  • Uglify: uglifyjs
  • Transpile: bablejs,typescript
  • 其他语言加入竞争: esbuild,parcel

2. Web服务端应用(竞争激烈,Node.js有自己独特优势)

  • 学习曲线平缓、开发效率高
  • 运行效率接近常见的编译语言
  • 社区生态丰富,工具链成熟
  • 与前端结合的场景会有优势

3. Electron跨端桌面应用(大部分场景在选型时值得考虑)

  • 商业应用:vscode,slack,discord,zoom
  • 大型公司内的效率工具

Node.js运行时结构

jg.png

引用自:字节跳动青训营 Node.js与前端开发实战课程

特点

异步I/O

yb.png

单线程

dxc.png

跨平台

kpt.png

编写Http Server

步骤:

  1. 安装Node.js
  2. 编写Http Server + Client,收发GET POST 请求
安装Node.js

Windows系统推荐官方安装包

Http Server

通过require 'http',创建一个serve,并且响应'hello',接着在端口3000处监听server 接着再创建一个有请求(req)有响应(res)的服务器,服务器里定义一个bufs数组,用于存放数据,将接收到的data数据一次存放到数组bufs中。接着将'end'放到reqData数据中,将json格式的数据设置响应头,输出‘Hello’

const http = require('http')

const port = 3000

const server = http.createServer((req,res) => {
  res.end('hello')
})

server.listen(port,() => {
  console.log('server listen on: ${port}')
})

const server = http.createServer(req,res) => {
  const bufs = []
  req.on('data', data => {
    bufs.push(data)
  })
  req.on('end', () => {
    let repData = {}
    try{
      reqData = JSON.parse(Buffer.concat(bufs).toString())
    }catch (err){
      res.setHeader('Content-Type', 'application/json')
      res.end(JSON.stringify({
        echo: reqData.msg || 'Hello'
      }))
    }
  })
}
Http Client

将对象或值转化为JSON字符串形式存储到body中,发起request请求,方法为POST请求,定义请求头,将响应内容写到bufs数组中,将bufs,JSON格式数据转换为对象存到recrive中,打印receive。
如果你就想要发送一个信息体, 记得要在头信息里包含Content-Length 项

如果你想要将BODY 通过流的方式 传输发送, 或许需要设置Transfer-Encoding: chunked.
大多数的站点相应用户请求时
发送的HTTP Headers 里包含Content-Length . 该信息是用来告知用户代理,
通常意义上就是浏览器,
服务端发送的文档内容长度. 浏览 器接受到此信息后,
接收完Content-Length 中定义的长度字节后开始解析页面.

const http = require('http')

const body = JSON.stringify({msg: 'hello from my client'})

const req = http.request('http:..127.0.0.1:3000', {
  method:'POST',
  header: {
    'Content-Type': 'application/json',
    'Content-Length': body.length,
  },
  
}, (res) => {
  const bufs = []
  res.on('data', data => {
    bufs.push(data)
  })
  res.on('end', () => {
    const receive = JSON.parse(Buffer.concat(bufs).toString())
    console.log('receive:', receive)
  })
})

个人总结

重点:

  1. Node.js运行时结构
  2. 编写Http Server

难点:

编写HttpServer 编写Http erver 和 Http Client,发起POST请求,node.js怎么导入http模块,怎么创建server,如何获取请求,如何渲染响应,如何监听server,在httpserver中,JSON格式数据和对象格式数据分别怎么处理

学习到的内容

我通过本次课程学习,知道了Node.js如何发起POST请求,node.js怎么导入http模块,怎么创建server,如何获取请求,如何渲染响应,如何监听server,在httpserver中,JSON格式数据和对象格式数据分别怎么处理等。

参考资料

引用自:字节跳动青训营 Node.js与前端开发实战课程