当前位置: 首页 > news >正文

【通识】NodeJS基础

1. 基础模块

一个简单的server

var http = require('http')
http.createServer(function(request, response) {response.writeHead(200, {"Content-type": "text/plain"});response.write("Hello world");response.end();
}).listen(8888);
  1. Flie System -fs
const { readFile } = require('node:fs/promises');
const { resolve } = require('node: path');
async function logFile() {try {const filePath = resolve('./package.json');const contents = await readFile(filePath, {encoding:'utf-8'});console.log(contents);} catch(err) {console.error(err.message);}
} 
logFile();
  1. Path
  1. Http
  1. Net
  1. Cmd
  1. Process

2. V8核心

  1. 事件循环:宏任务和微任务
    宏任务是消息队列中等待被主线程执行的事件,每个宏任务在执行时都会创建栈,宏任务结束栈也会被清空。
    微任务:
    1)若当前任务中产生了一个微任务不会再被当前的函数中被执行,执行微任务时不会导致栈的无限扩张
    2)微任务在当前任务执行结束前被执行
    3)微任务结束执行前不会执行其他任务
    生存期Generator
function* getResult() {console.log('getUserID before');yield "getUserID"; // yield是生成器函数中的暂停和恢复点,首先暂停并返回`{value:"getUserId, done:false}`console.log('getUserName before'); // 下次执行.next()时执行yield 'getUserName'; // 暂停并返回`{value:"getUserName, done:false}`console.log('name before');return 'name'; // 
}
let res = getResult();
  1. 内存原理

3. 基础概念

  1. 文字编码 - Node.js支持以下:ascii(7位,去掉高位的话这种编码非常快);utf-8多字节编码的Unicode字符、许多网页和其他文档都使用UTF-8;utf16le中2或4个字节,小字节序编码的Unicode字符,支持代理对(U+10000至U+10FFFF);ucs2utf16le的别名;base64编码(包括小写字母a-z,大写A-Z,数字0-9,符号+、/一共64个字符的字符集(另加一个"=",实际65),任何符号都可以转换成这个字符集中的字符,转换过程称为base64编码);latin1一种将Buffer编码成一字节编码的字符串的方式(由IANA定义在RFC1345);binarylatin1的别名;hex将每个字节编码为两个十六进制字符

在ECMAScript 2015(ES6)引入TypedArray前,JS没有读取或操作二进制数据流的机制。TypedArray已被添加进ES6中,buffer类以一种更优化、更适合Node.js的方式实现了Uint8Array。Buffer类的实例类似于整数数组,但buffer大小固定且在V8堆外分配物理内存。Buffer类在Node.js中是一个全局变量,因此无需使用require(‘buffer’).Buffer

Buffer对象用于表示固定长度的字节序列,类是JS中Uint8Array类的子类,并用涵盖额外用例的方法对其进行扩展。Node.js API在支持Buffer的地方页接受纯Uint8Array,通过import或require语句显式地引用
js: Unit8Array - 该类型的数组,内容初始化为0。建立后用对象或标准数组索引语法(即使用括号表示)引用数组中的元素

const { Buffer } = require('buffer');
// 创建一个长度为10的缓冲区
const buf1 = Buffer.alloc(10);
// ...的Buffer
// 填充值为'1'
const buf2 = Buffer.alloc(10,1);
// 创建...为10的未初始化缓冲区
// 比调用alloc()要快但返回的Buffer实例可能包含旧的数据
// 使用fill(),write()或其他填充Buffer的函数覆盖内容
const buf3 = Buffer.allocUnsafe(10);
// 从数组创建[1,2,3]
const buf4 = Buffer.from([1,2,3]); 
// creates a buffer containing the bytes[1,1,1,1] - the entries are all truncated using `(value &255)` to fit into the range 0-255
// 翻译:creates a buffer containing the bytes[1,1,1,1] - the entries are all truncated using `(value &255)` to fit into the range 0-255
// 其中,保留技术符号&和位运算表达式原貌;"truncated"译为"截断"并补充说明"截取到...范围内"的操作结果;使用中文破折号“——”或括号()体现原文的补充说明关系
// 明确0-255范围值(计算机领域通常不写作"0~255“)
// 补充位运算说明使”&“操作的技术含义更清晰
const buf5 = Buffer.from([257,257.5, -255, '1'])
// 为字符串'tsamest'创建一个包含utf-8编码字节的缓冲区
// [0x74, 0xc3, 0xa9, 0x73, 0x74](十六进制)
// [116, 195, 169, 115, 116](十进制)
const buf6 = Buffer.from('test')
// 创建一个包含Latin-1字节的缓冲区[0x74, 0xe9, 0x73, 0x74]
const buf7 = Buffer.from('test', 'latin1');
const { Buffer } = require('node: buffer';
const buf = Buffer.from('Hello world', 'utf8');
console.log(buf, toString('hex');
  1. 图像编码 - Base64
    概念是字符串(图片等)转换成二进制序列,然后按每6个二进制位为一组分成若干组。若不足6位,则低位补0。每6位组成一个新字节、高位补00,构成一个新的二进制序列,最后根据base64索引表中的值找到对应的字符
原始字符abc
ascii编码979899
二进制位011000010111001001100011
编码转换00011000000101100000100100100011
base64索引值2422935
base64字符YWJj

如01100001这里,分割为6位组需要补到12位(即6x2),即低位补4个0:01100001+0000 $\rightarrow $011000010000:分割为两组011000, 010000
->Base64字节:高位补0有00011000,00010000
通过查表映射
左移两位:01100001->10000100不匹配
循环右移:01100001->01011000不匹配
位反转:01100001->10000110不匹配
在这里插入图片描述
(该图像来源于:https://www.w3ccoo.com/tools/base64code/)

  1. 1

2. Express Koa的开发

  1. Web Server开发
    1)开发web server需要处理的问题:
    a. 接受请求,解析参数,get/post, restful, upload
    b. 处理静态资源
    c. ssr渲染前端页面
    d. 创建数据库页面,使用model进行数据库操作
    e. session, cookie等用于登录的处理, token的签发
    f. api请求的处理,包括路由逻辑
    g. 拦截器的开发方便做路由拦截
    h. api参数过滤,方便处理请求参数
    i. mq消息队列,分布式系统基础
    j. websocket\webrtc实时性
    k. 并发处理(nodejs异步函数原生性支持)
    l. 事物处理(nodejs弱项)
    2)核心原理
    a. 异步串行流程控制:用串行化流程控制让异步任务按顺序执行,并放置到一个数组中。如图,
    b. 一个由服务端渲染的Vue.js应用被认为是“同构的”(lsomorphic)或“通用的”(Universal),因为应用的大部分代码通识运行在服务端客户端
    使用SSR的优势:更快的首屏加载(慢网速或运行缓慢的设备上很重要);统一的心智模型;更好的SEO
  2. 1
http://www.dtcms.com/a/271704.html

相关文章:

  • LLaMA 学习笔记
  • Java 多态详解:从原理到实战,深入理解面向对象编程的核心特性
  • C#基础篇(09)结构体(struct)与类(class)的详细区别
  • Vue响应式原理三:响应式依赖收集-类
  • 大模型的下半场:从工具到智能体的产业变革与2025突围之路
  • AI大模型:(二)4.2 文生图训练实践-真人写实生成
  • 8.2 文档预处理模块(二)
  • 学习笔记(31):matplotlib绘制简单图表-直方图
  • UNet改进(19):基于残差注意力模块Residual Attention的高效分割网络设计
  • 编译安装的Mysql5.7报“Couldn‘t find MySQL server (mysqld_safe)“的原因 笔记250709
  • 主流大模型Agent框架 AutoGPT详解
  • 软件互联网产品发版检查清单
  • WIndows 编程辅助技能:格式工厂的使用
  • Dify教程更改文件上传数量限制和大小限制
  • JVM 调优
  • 双指针-15.三数之和-力扣(LeetCode)
  • AI技术如何重塑你的工作与行业?——实战案例解析与效率提升路径
  • gdb调试工具
  • Lingo软件学习(一)好学爱学
  • DPDK graph图节点处理框架:模块化数据流计算的设计与实现
  • dify配置邮箱,密码重置以及邮箱邀请加入
  • 【Java】【字节面试】字符串中 出现次数最多的字符和 对应次数
  • HTML应用指南:利用GET请求获取全国山姆门店位置信息
  • 跨服务sqlplus连接oracle数据库
  • 如何卸载本机的node.js
  • 源码角度解析 --- HashMap 的 get 和 put 流程
  • 前端使用fetch-event-source实现AI对话
  • AI Agent:我的第一个Agent项目
  • 爬虫-数据解析
  • [C语言初阶]操作符