这是我参与「第四届青训营 」笔记创作活动的第2天
笔记大纲
- Node.js的应用场景
- Node.js运行时结构
- 编写Http Server
- 个人总结
- 参考资料
详细介绍
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运行时结构
引用自:字节跳动青训营 Node.js与前端开发实战课程
特点
异步I/O
单线程
跨平台
编写Http Server
步骤:
- 安装Node.js
- 编写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)
})
})
个人总结
重点:
- Node.js运行时结构
- 编写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与前端开发实战课程