这是我参与「第五届青训营」伴学笔记创作活动的第 9 天
一、本堂课重点内容:
- NodeJS 应用场景
- 使用 NodeJS 编写简单的 HTTP Server
二、详细知识点介绍:
1. NodeJS应用场景
NodeJS被广泛应用于前端工程化(Vue、React、AngularJS等)、Web 服务端应用(Vercel)和 跨端桌面应用(Electron等)场景
许多熟知的打包构建工具都有NodeJS参与,例如 webpack、vite、esbuild和parcel等,也有例如babel和ts等语言转换程序也由nodejs编写。
在前端工程化领域,NodeJS也有许多优势,首先是学习曲线平缓、开发效率较高、其次是运行效率较高,社区生态丰富。且由于其语言优势,和前端结合更加顺畅,例如某些服务端渲染场景。
在跨端应用方面,微软的VSCode、聊天工具Slack、Discord都由Electron开发,值得在项目选型时考虑。
三、实践练习例子:
简单的 Hello World
const http = require('http')
const port = 3000
const server = http.createServer((req, res) => {
res.end('hello')
})
server.listen(port, () => {
console.log(`listening port on ${port}`)
})
首先,需要使用 require('http') 引用 NodeJS 自带的 http 模块。接着,使用 createServer 方法为请求绑定处理事件函数,其中,第一个参数是请求,第二个参数是响应,使用 res.end('hello') 来结束请求并返回 hello 字符串。最后,使用 listen 函数设置监听的端口,第一个参数是端口号,第二个参数是绑定成功的回调函数。
简单的静态文件服务
const http = require('http')
const fs = require('fs')
const path = require('path')
const url = require('url')
const port = 3000
const server = http.createServer((req, res) => {
const info = url.parse(req.url)
const file = fs.createReadStream(path.resolve(__dirname, '.' + info.pathname))
file.pipe(res)
})
server.listen(port, () => {
console.log(`listening port on ${port}`)
})
上面这段代码将传入的 url 和工作路径拼合成本地绝对路径,通过 NodeJS 自带的文件操作模块 fs 的 createReadStream 创建了一个文件流,并通过流内部方法pipe将其输出给res(响应对象),实现将对应路径的文件返回给浏览器的功能
四、课后个人总结:
NodeJS在当前环境下优势得天独厚,值得学习。其有着和其他语言相似的逻辑,且由于使用javascript,对于前端来说学习成本更低。