node.js系列
文章平均质量分 89
node.js的一些学习笔记
coderlin_
幸运=99%的努力+1%的运气
展开
-
jwt+nest.js,实现登录挤出功能
什么是JWTJWT的全称是JSON Web Token。一个jwt由三部分构成:Header,payload,Signature(签名)。Header部分主要规定了token的加密方式。如{alg: "xx", type: "JWT"}payload是token中包含的重要信息。Signature,就是header的base64的值+payload的base64+密钥组成的HS256算法,左边就是生成的token。JWT特点:防止CSRF,跨站请求伪造。适合移动应用无状态原创 2022-04-18 23:23:12 · 1317 阅读 · 0 评论 -
基于net模块,从零实现websocket(ws模块)
WebsocketWebsokcet是H5开始提供的一种浏览器与服务器进行全双工通讯的网络技术通俗的讲,就是在客户端和服务器有一个持久的链接,两边可以在任意时间开始发送数据。属于应用层协议,它是基于TCP传输协议的,并复用HTTP的握手通道。websocket连接websocket服用了http的握手通道。具体就是,客户端通过http请求,与websocket服务端协商升级协议,协议升级完毕之后,后续的数据交换则遵守Websocket的协议。请求体中Upgrade表示升级为webso原创 2022-04-17 15:52:16 · 3169 阅读 · 1 评论 -
深入node.js 6 node中的Http服务器
httpnode中提供了http模块来创建服务。http模块内部是基于tcp的(net)模块,内部基于socket来通信,http会增加一些header信息,请求来了之后需要在socket中读取数据,并解析成请求头。 http主要就是在socket的基础上封装了header信息,还有解析请求,响应数据基本使用const http = require("http");const server = http.createServer((req, res) => { console.log原创 2022-01-19 19:56:45 · 362 阅读 · 0 评论 -
深入node.js koa原理,实现koa
express 和koa 的对比express源码是基于es5写的,koa是基于es6写的。express比较全,内置了很多功能,koa内部核心非常小巧,需要通过扩展的插件来进行扩展express 和koa都hi可以自己实现mvc功能express处理异步都是回调函数,而koa处理异步都是async + awaitkoakoa的ctx上下文提供很多比如使用http模块中的req通过解析才能获取的pathname,koa中直接通过ctx.path获取。因为底层还是http,还是通过封装htt原创 2021-12-16 17:28:37 · 735 阅读 · 0 评论 -
node.js 深入 5 fs对文件的操作,创建删除
首先要学习二叉搜索树的实现,可以看这篇文章二叉搜索树fs对目录的操作创建目录需掌握的api: fs.mkdir, fs.mkdirSync, fs.existSync, fs.stat.fs.mkdir异步创建目录,只能一层一层创建,而且当D存在的时候会报错。我们实现自己的Mkfir方法,使其可以跨层创建并且文件已存在也不会报错。思路:通过递归,先一层一层创建出来,然后判断如果存在就不创建,继续递归。实现自己的Mkdir方法,递归执行创建,通过fs.stat来判断是否创建还是跳过。创建成原创 2021-12-11 10:08:19 · 2778 阅读 · 0 评论 -
深入node4 可写流的实现 转化流
可写流的使用可写流的highWaterMark表示期望这个文件接受多少个值。end不仅会写入,而且会触发close事件。一个true,一个false,是因为我们的highWaterMark设置了3,希望只用3个内存来写,但是返回的值与我们是否写入无关,返回false也会写入。但是有个问题,我们写多个wirte的时候,是并发异步操作,所以不能确定哪个快哪个慢。可以将并发异步操作变为串行异步。除了第一次的write,接下来的write排队,第一个完成后,将队列中的每一个wr原创 2021-12-08 08:52:50 · 521 阅读 · 0 评论 -
深入node.js 3 模板引擎原理 事件 文件操作 可读流的实现原理
模板引擎的实现模板引擎是基于new Function + with 实现的。ejs使用实现:思路:借助fs的readFile先读取文件内容,然后使用正则表达式替换掉即可。打印的结果是一样的。复杂的情况呢?拼接字符串,拼成想要的代码主要难点就是在字符串的拼接,第二部分,将全文分为三部分,然后拼接对应的,如let str = ""; with(obj){str+= `<!DOCTYPE html><html lang="en"><head&g原创 2021-12-06 09:04:08 · 529 阅读 · 0 评论 -
深入node学习2 实现commonjs
node中的模块node主要有两种,esmodule,和commonjs,经过webpack编译,esmodule会被打包成commonjs的模式。esmodule是静态模块,可以tree-shaking,而commonjs是动态的,无法tree-shaking。如a.jsconst path = require('path')function A () {}moduel.exports = {}b.jsif(true){require('./a.js')}如上,commonjs支持原创 2021-12-03 08:13:26 · 410 阅读 · 0 评论 -
node深入学习(1) eventloop
多线程优点:同时处理多个请求,适合cpu密集型运算缺点:如果多个线程操作同一个资源得上锁。多线程并不是一起去干一些事情,而是靠切换上下文(浪费一些性能)单线程node的主线程是单线程,不需要开启多个线程,节省资源,不适合做大量的cpu操作。但是node提供了开启子进程,可以将比较大的操作放入子进程去运行。同步异步和阻塞非阻塞阻塞非阻塞是相对于操作方的,操作放调用了同步方法,这时候就会阻塞。同步异步是相对于调用的方法。比如调用readFile就是异步的。异步非阻塞:调用异步的方法,操作方不会被阻原创 2021-12-01 08:45:21 · 365 阅读 · 0 评论 -
node数据库学习之mysql 1
数据库mysql 关系型数据库 //一张张表 (有关联的数据)mongodb 非关系型数据(文档型数据库) //一个个文档 (数据量大,安全性较低)redis key-value键值对 //存放键值对 (速度最快)数据库的基本概念实体只要在客观世界存在的,可以被描述出来的都是实体。如,人,狗,桌子等等数据库数据库就是数据的仓库,可以存放结构化的数据数据库管理系统(DBMS)是一种系统软件,提供操作数据库的环境,可以通过数据库管理系统对数据进行插入,修改,删除,查询等操作。SQL结构原创 2021-11-25 10:27:48 · 865 阅读 · 0 评论 -
nest学习(2) js装饰器+nest控制器
装饰器因为Nest大量使用装饰器,所以复习一下装饰器装饰器是一种特殊的类型声明,能够附加到类型,方法,属性或者参数上,可以修改类的行为。通俗的讲,装饰器就是一个方法,可以注入到类,方法,属性参数上来扩展类,属性,方法的功能。常见的装饰器有:类,属性,方法,参数装饰器普通装饰器(无法传参) 装饰器工厂(可传参)1 类装饰器类装饰器应用于类的构造函数,可以用来监视,修改,和替换类定义。这个params就是类A本身,所以可以i在装饰器中拿到类并且扩展器属性,方法可以看到动态扩展属性方原创 2021-08-20 08:47:02 · 1140 阅读 · 0 评论 -
nest上传图片
nest上传图片前端使用react+antd的upload效果import React, { memo, useState, useEffect } from "react";import { Upload as AntdUpload, message } from "antd";import { LoadingOutlined, PlusOutlined } from "@ant-design/icons";import "./Upload.style.scss";import { U原创 2021-09-05 14:44:00 · 1635 阅读 · 1 评论 -
nest.js学习(1)
官网介绍nest是基于express的,其设计很多源自与anglur,跟java的spring框架很像。基本架构每个模块都有控制器controoler,app模块module,和一个service服务,提供数据先看module使用装饰器装饰,将app的控制器和服务都注入到该类,若有其他app的子模块,还可以注入到imports,这样就会注册该子模块。入口文件入口文件则是根据根模块appmodule创建了一个服务,并且将其监听在3000端口号,在这里可以做一些全局的中间件,比如链接原创 2021-08-18 09:07:53 · 249 阅读 · 0 评论 -
nest.js学习(3)静态资源配置和模板引擎+服务Service+cookie+session
nest.js配置静态资源因为nest是基于express,我们得使用@nestjs/platform-express这个东西。接着我们安装官网的示例敲一遍配置成功,起别名模板引擎配置nest配置ejs跟express配置是差不多的npm i ejs --save配置:官网但我们使用的是ejs建立视图联系。然后只要控制器中使用使用装饰器,传入index参数表示要找到该ejs模板,然后就会渲染该模板,return的对象会作为ejs的对象使用模板引擎就配置好了。原创 2021-08-22 15:02:23 · 1020 阅读 · 0 评论 -
node.js 系列8Http 模块
Http模块http模块可以帮助我们创建服务器,目前有很多开源的web服务器,比如nginx,node.js等等。初体验这样我们的本地服务器,127.0.0.1:8080已经启动。使用nodemon可以监听文件的变化,从而不用每次修改代码而要重新手动启动服务器。接受一个requestListener,拿到的req,res就是请求参数以及返回对象,request,response的缩写。第二种启动服务i器的方法 new http.Server这种的本质跟http.createServer的原创 2021-05-20 22:23:39 · 316 阅读 · 0 评论 -
node.js系列10 koa2框架
Koa2koa是express的下一代框架,他是express同一个团队,koa2具有更强的异步处理能力。koa初体验与express不同的是导出的还是一个类,而且中间件的参数也只变成了两个,ctx上下文,和Next(源码是dispatch)请求没结果,直接not found,这也是与express区别的地方,express是没返回直接挂起来,koa是没返回就直接not fountd这就是一个简单的koa服务器。koa的中间件,通过koa创建的app,注册中间件只能使用use方法,koa原创 2021-05-26 22:07:08 · 490 阅读 · 0 评论 -
Node开发
node是什么node是一个代码运行环境,也能够运行JS代码。JS的三要素是ECMAscript,DOM,BOM,而node.js是ECMAscript,Node,API。怎么使用Node.js首先在使用的文件中,按住shift键+鼠标右键,出现一个‘在此处打开Powershell串口’,点击后即可打开如创建一个node.js文件然后该文件的目录位置打开powershell窗口,如图node.js被调用了。全局对象在浏览器中,全局对象是window而在node中,全局对象是globa原创 2020-09-27 23:53:23 · 1156 阅读 · 0 评论 -
node.js系列 4 常用的内置模块解析
node对es module的支持第一种:第二种:设置package.json,设置type:‘module’。commonjs的exmodule的交互,相互调用通常情况下,commonjs不能加载esmodule,因为esmodule是在parsing解析阶段执行的,而且commonjs是在运行阶段时候执行的,而且esmodule是异步的,所以可能esmodule还没导出,然后rqeuire就要去取了,可能就有冲突的。而esmodule加载commonjs多数情况下,是可以执行的。esmo原创 2021-05-15 23:43:59 · 616 阅读 · 0 评论 -
node.js学习 5包管理工具的详解
共享代码的方式1 github缺点是,手动找地址下载,还要管理依赖,版本升级的时候可能有冲突2 使用专业的工具管理我们的代码通过工具将代码发布到特定的位置,然后其他人可以通过工具来安装升级删除我们的工具代码。如npm包管理工具npm这个起初是node包管理工具,但是现在已经可以管理很多很多的东西了。https://www.npmjs.com/但是其实axios的包是放到registry仓库的, 我们安装包时其实是从registry仓库下载的。项目配置文件前端的话是package.json原创 2021-05-16 12:23:59 · 391 阅读 · 2 评论 -
node学习2 全局对象和模块化开发
常见全局对象node传参数如,node里面有个process对象,存储着很多数据我们只要这样运行,就能通过process.argv拿掉数据。console.clear()执行node后输出结果并且闲先清掉控制台的东西。console.trace()打印函数的调用栈,可以在某个函数里面打印,就可以查看该函数被谁调用。console也是个全局对象,也有很多方法什么的。其他的全局对象http://nodejs.cn/api/globals.html特殊的全局对象每个模块都有的看起来像原创 2021-05-09 16:05:13 · 106 阅读 · 0 评论 -
node.js系列 9 express框架核心用法以及源码
expressexpress是对http模块的一个封装,是一个相对简单的框架。核心就是中间件!!!!!!!(回调函数)最基本的使用以后的开发基本是基于这三个以上的next的作用是当有两个同样的路劲监听时,加next就会执行第二个,不加就会卡在第一个,不执行第二个。还可以app.post处理post请求等等。认识中间件express的核心就是中间件,express本身功能很少,但可以借助一系列中间件使其功能强大。中间件的本质时传给express的一个回调函数,这个回调函数接受三个参数,r原创 2021-05-24 00:16:16 · 493 阅读 · 0 评论 -
再遇Node.js(1)
node之前只是大概的学了下Node,现在趁五一深学一下。基于v8引擎的js运行时环境。怎么理解呢?我们先了解浏览器的内核。不同的浏览器有不同的内核。Gecko 早期被火狐浏览器使用Triden 微软开发,ie4-11试用,edge已经转为blink内核webkit 用于safari,谷歌之前也是webkitBlink webkit的分支,谷歌研发,目前用于谷歌,edge,opera等等。。。我们经常指的浏览器内核也就是浏览器的排版引擎,也成为浏览器引擎,页面渲染引擎,样板引擎等等。原创 2021-05-05 21:45:15 · 103 阅读 · 0 评论 -
node.js 系列 7 异步IO
Node的架构分析浏览器中的EventLoop是根据H5定义的规范实现的,不同的浏览器可能有不同的实现,而Node是有libuv实现的。libuv是一个多平台的专注于异步IO的库libuv中主要维护了一个Eventloop和worker threads(线程池),eventloop负责调用系统的一些其他操作,比如文件的IO,network等等。这就是node的架构,重要的两个部分就是v8和libuv,可以看到libuv里面的事件循环和线程池。js代码通过v8引擎,然后node的bindings最后到原创 2021-05-19 00:04:22 · 208 阅读 · 1 评论 -
node.js 3 模块化开发和原理解析
模块化require细节require是一个函数,require(’./)返回导出的对象,查找规则require的查找路劲require(x)1 x是一个核心模块,比如path,http,则直接返回核心模块。2 x是以./ …/ /开头的吗?是的话就当作一个文件去对应的目录下查找,有后缀名的时候,直接按照后缀名查找,没有的话,先 直接找x,找不到就根据x.js, x.json, x.node这个顺序来找。那还找不到就将x作为一个目录,根据x/index.js x/index.json原创 2021-05-14 00:34:38 · 150 阅读 · 0 评论 -
react+ts+node完成王者荣耀官网项目
该项目是根据b站全栈之巅的vue+node完成王者荣耀官网,自己实现的一个react版本的,不得不说vue跟react写起来真是不太一样。成果图后台管理界面app端。。。。。gitee地址app端: https://gitee.com/fine509/react_app管理端: https://gitee.com/fine509/kings-glory-management-end后台: https://gitee.com/fine509/kings-glory-bac原创 2021-07-18 14:14:25 · 1349 阅读 · 8 评论 -
node.js系列 6Buffer和事件循环机制
Buffer数据的二进制计算机所有的内容最终都是使用二进制来表示的。而js可以直接处理其他非常直观的图片,比如字符串,但是图片这种,js一般只是告诉浏览器一个url,比如img的src。而浏览器就负责获取在这个图片,并且最终渲染出来。前端一般可以依赖浏览器,但是对于服务器不同,我们用js,node开发服务器的时候,要处理的本地文件类型较多Node提供了类Buffer,全局的,存储的是二进制数据我们可以将buffer看成是一个存储二进制的数组, 【八位二进制,【】,【】】每一项可以保存8位2进制原创 2021-05-16 23:24:45 · 197 阅读 · 0 评论 -
Node.js异步函数处理
解决回调地狱什么是回调地狱?举一个简单的例子吧,setTimeout(()=>{//假设这里有1000行代码,接着setTimeout(()=>{//假设这里有一千行代码},2000)},2000)以此类推,反复嵌套,由于setTimeout是异步函数,故会一直回调一直回调。从而产生回调地狱解决方法1 Promise我们先学习Promise对象let promise=new Promise((resolve,reject)=>{if(true)resolve(‘原创 2020-11-01 16:35:11 · 488 阅读 · 0 评论 -
全栈项目(react+ts改造b站全栈vue项目) 王者荣耀app端web管理端+node后台 上传图片问题,react富文本问题
技术: react+ts+node+express+mongodb1 上传图片问题借用antd库的upload组件,action参数是图片传去的后台地址,逻辑就是,上传图片到后台,后台暴露静态资源,然后返回url给前端即可。这里使用了express的中间件,然后引用multer这个库做处理,当我们点击上传后接着第二个中间件就可以通过req.file拿到信息接着将静态资源接口开放,然后返回url地址。这样前台就能拿到url的地址了。...原创 2021-05-20 00:20:50 · 256 阅读 · 1 评论