
NodeJs
文章平均质量分 78
Wang's Blog
Keep learning for the innovation era.
展开
-
Nestjs框架: 可集成在Nestjs上的日志模块pino和winston的使用
两个第三方的包:winston, pinowinston好处:DailyRotateFile 方便winston缺点:是需要在自己手动加入日志,, 麻烦pino的好处:开箱即用pino的缺点:配置没有winston丰富Nest官方内置的日志,够用,但是不详细关于选择懒人用pino, 而且性能较高用 winston,一般日志手动加,方便调试。原创 2024-02-25 23:12:20 · 1487 阅读 · 0 评论 -
Nestjs框架: 日志和官方日志
1 )如果项目中,使用 typeORM,需要关闭,日志开关如下。2 )关闭整个程序的日志。3 ) 在Nestjs中记录日志。4 )在控制器中使用。原创 2024-02-25 17:56:44 · 1026 阅读 · 0 评论 -
Nestjs框架: 多环境参数配置
正常来说,如果不使用 isGlobal 配置,就会出现如上问题,所以可以在如上的代码示例中,也就是 app.module.ts 中使用。在 app.module.ts 中配置,在这里配置后,相关 controllers 和 providers 都可以使用。分环境来分别配置,后续读取的时候,还是基于process.env.NODE_ENV 来读取对应的配置数据。这样,公共的配置,放在 config.yml 文件中,使用 _.merge 来合并两个配置。使用,在 app.module.ts 中。原创 2024-02-22 14:35:10 · 1922 阅读 · 0 评论 -
nodejs微服务:微服务集群
当一台微服务挂掉,我们怎么让服务仍然正常运行,需要在客户端调用微服务前进行负载均衡的处理。我们同时借助了consul集群,保证了服务的稳定运行,但是我们还应当实现API网关的集群。在调用前基于健康的服务进行随机选择微服务机器进行调用,实现了微服务集群的负载均衡。这样,微服务集群已经配置好了,但是上述调用写法可以抽离出一个公共的方法包出来。consul 负载均衡微服务代码如下。原创 2023-04-08 02:16:17 · 553 阅读 · 0 评论 -
nodejs微服务:Consul集群
Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置Consul 是分布式的、高可用的、可横向扩展的, 完成consul的安装后,必须运行agent原创 2023-04-07 01:04:41 · 604 阅读 · 0 评论 -
nodejs微服务:Consul的角色、命令与使用
完成consul的安装后,必须运行agent,agent可以运行为 server模式、client模式或者dev模式,每个数据中心至少必须拥有一台server,建议在一个集群中有3或者5个server,部署单一server,在出现失败时,会不可避免的出现数据丢失原创 2023-04-06 16:25:17 · 549 阅读 · 0 评论 -
nodejs微服务:服务发现与Consul
我们在做微服务开发的时候,客户端的一个接口可能需要调用N个服务,客户端必须知道所有服务的网络位置(ip+port)原创 2023-04-06 14:37:23 · 963 阅读 · 0 评论 -
nodejs微服务:关于Protobuf的使用
如果需要将message与RPC一起使用,则可以在 .proto 文件中定义RPC服务接口。原创 2023-04-06 12:37:55 · 1485 阅读 · 0 评论 -
nodejs微服务:RPC与GRPC框架
后面自己要写的时候,可以将上述客户端和服务端,以及proto文件拷贝出去,写自己的业务需求。上述服务端和客户端中均引入了 helloworld.proto 这个文件有特定的书写语法。在上述 dynamic_codegen 目录中的代码就是微服务的代码。还有两个工具: grpc、protoLoader。有上述服务端代码中,我们看到有几个必要的步骤。客户端代码中,注意事项同上并参考注释。2.1 先启动服务端。2.2 后启动客户端。原创 2023-04-06 10:01:00 · 2661 阅读 · 0 评论 -
Nestjs中的守卫
在上述代码中,如果返回true,则可以访问程序,如果false则无法访问创建好守卫后,可以全局配置,可以在模块中配置1 ) 下面我们在 admin模块的 user 控制器中使用守卫从上面代码中可以看到,可以在全部控制器中使用,也可以在控制器中某个方法使用2 ) 全局使用守卫在根模块中配置在main.ts中配置...原创 2022-07-10 12:27:29 · 1178 阅读 · 0 评论 -
Nestjs中关于模块和模块的共享
根模块在创建好项目之后,nestjs默认就会有一个root模块, 也就是:src/app.module.ts这里也是nestjs组装应用的方式,在装饰器中,可以传入如下几种参数如果项目比较小,只需要一个根模块就行了, 如果项目大了,所有模块放到一个根模块里维护起来会不方便,代码量会超长,这时候代码reviewer就会找你麻烦了我们建议将项目拆分成不同的模块去维护,Angular就是这么做的, 所以Nestjs吸收了其优点创建子模块然后再src/module下又会看到三个模块的目录,这时候模块是定义原创 2022-07-10 00:55:45 · 2488 阅读 · 0 评论 -
Nestjs配置文件上传, 配置中间件以及管道的使用
安装插件示例1 ) 简单单个上传前端代码后端代码2 ) 多文件上传或者使用Any类型的拦截器AnyFilesInterceptor需要注意的是,我们每次上传时,这些路径,图片处理什么的,需要封装一下Nestjs 中间件同express一样,nestjs中间件也可以理解为在请求和响应之间的一个管道处理程序可以是一个函数,也可以是一个@Injectable() 装饰器装饰的类中间件作用中间件的创建和使用1 ) 创建我们按照文档上,改造一下2 ) 在app.module原创 2022-07-03 20:35:19 · 3111 阅读 · 0 评论 -
Nestjs配置服务,配置Cookie和Session
内置服务在我们生成模板项目的时候,已经有一个服务了:app.service.ts这个服务其实是一个类,是一个被@Injectable装饰器装饰的类,在app.module.ts中引入并配置如果哪里用到这个服务,就在哪里注入,比如在app.controller.ts中去调用服务里面的方法创建服务开发模板结构化配置1 ) cookie的初步使用对用户信息进行标识,让用户多个页面信息共享,这时候我们就要基于cookie和session来处理Nestjs默认使用express的HTTP配置时,我们可以安原创 2022-07-02 06:45:03 · 1605 阅读 · 0 评论 -
Nestjs配置静态资源,模板引擎以及Post示例
上述是官方配置这样可做最简单的配置设置虚拟路径原创 2022-06-30 00:16:59 · 1619 阅读 · 0 评论 -
Nestjs中控制器和路由的配置使用
1 ) 控制器的作用2 ) 控制器的创建示例:当执行创建命令后,不仅生成了一个src/about目录,目录下有2个控制器文件分别是:about.controller.spec.ts 和 about.controller.ts还更新了主模块:/src/app.module.ts, 也就是自动注入了该控制器模块我们继续写业务逻辑示例:当请求处理程序返回JavaScript对象或数组时,它将自动序列化为JSON但是,当它返回一个字符串时,Nest 将只发送一个字符串而不是序列化它这使响应处理原创 2022-06-26 18:49:37 · 1627 阅读 · 0 评论 -
Nestjs入门和环境搭建
1 ) 环境准备操作系统:支持 macOS,Linux,Windows运行环境:Nodejs 建议选择 LTS 版本,建议使用最新版本2 ) 安装 Nest 脚手架以及使用 CLI 创建项目我们推荐直接使用脚手架,只需几条简单指令,即可快速生成项目:启动项目:...............原创 2022-06-26 13:44:43 · 1726 阅读 · 0 评论 -
nodejs在windows下的安装配置(使用NVM的方式)
nodejs 是什么? Node.js® is a JavaScript runtime built on Chrome’s V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. Node.js’ package原创 2021-01-13 07:53:19 · 68501 阅读 · 92 评论 -
Socket.io教程: koa集成socket.io
Koa集成Socket.io步骤类比之前express项目中的使用,有以下几个步骤安装:$ cnpm i -S koa-socket引入: const IO = require( 'koa-socket' )实例化:const io = new IO()接入koa: io.attach( app )配置服务端客户端使用后端演示var Koa = require('koa'), router = require('koa-router')(), views = requ原创 2020-06-07 21:14:35 · 1428 阅读 · 0 评论 -
Socket.io教程: 基于Express的多聊天室(分组)的简单设计与实现
多聊天室(多个分组)的简单设计概述相当于实现多个群聊的功能每个群之间互相不干扰后端设计var express = require('express');var url = require('url');var app = express();var server = require('http').Server(app);var io = require('socket.io')(server);app.set('view engine','ejs');app.use(expres原创 2020-06-07 20:48:19 · 786 阅读 · 0 评论 -
Socket.io教程: 基于Express的多人聊天室的简单设计与实现
多人聊天室的简单设计概述相当于实现一个简单的群聊功能demo用户输入自己的名称进入聊天室多人即时畅聊后端设计var express=require('express');var app=express();var DB=require('./module/db.js');app.set('view engine','ejs');app.use(express.static('public'));var server = require('http').Server(app);v原创 2020-06-07 19:44:11 · 351 阅读 · 0 评论 -
Socket.io教程: 基于Express和Mongodb的智能客服的简单设计与实现
智能客服的简单设计概述一个用户查询界面用户输入一个文本,比如订单号服务器通过模糊查询返回相应的订单信息如果是智能的话,还应该有AI相关服务,比如:各种场景和话术以及相关模型训练这里只来体现soket.io相关功能,不涉及AI相关实现后端设计数据库的封装和配置module/config.jsvar dbUrl = 'mongodb://localhost:27017/your-db-name'; // 这里填写连接你数据库的配置urlmodule.exports={ dbUr原创 2020-06-07 19:20:57 · 386 阅读 · 0 评论 -
Socket.io教程: Express结合Socket.io实现通信: 聊天室及智能客服的简单演示
基于express的socket.io通信代码展示服务端var express = require('express');var app = express();var server = require('http').Server(app);var io = require('socket.io')(server);app.set('view engine','ejs');app.use(express.static('public'));app.get('/',function(re原创 2020-06-07 13:49:53 · 1013 阅读 · 0 评论 -
Socket.io教程: 原生nodejs结合Socket.io实现服务器和客户端的相互通信
安装 Socket.io官网:http://socket.io/$ npm install socket.ioSocket.io对象的创建写原生的 JS,搭建一个服务器,server 创建好之后, 创建一个 io 对象var http = require("http");var server = http.createServer(function(req,res){ if(req.url == "/"){ //显示首页 fs.readFile("./index.ht原创 2020-06-07 11:49:56 · 1201 阅读 · 0 评论 -
Eggjs笔记:集成sequelize orm
关于Sequelize在一些较为复杂的应用中,我们可能会需要一个ORM框架来帮助我们管理数据层的代码。而在 Node.js 社区中,sequelize 是一个广泛使用的 ORM 框架,它支持 MySQL、SQLite 和 MSSQL 、PostgreSQL 等多个数据源。相关文档https://eggjs.org/zh-cn/tutorials/sequelize.htmlhttps://sequelize.org/Sequelize 操作 Mysql 数据库安装 egg-sequeliz原创 2020-06-06 11:49:06 · 660 阅读 · 0 评论 -
Eggjs笔记:关于JWT的接口权限验证
关于接口的安全验证基于 Session 的安全验证Session 存储在服务器,用户用户比较少的话是一种简单的安全验证机制,但是涉及到跨域 的话需要进行一些配置用户量非常非常大的话会耗费一定的服务器资源(中小项目不需要考虑)对请求参数进行加密的签名验证涉及公钥、私钥、签名等JWTJWT 全称 JSON Web Token,是目前比较流行的另一种跨域身份验证解决方案也是被很多人用坏的一种安全验证机制,具体需要看项目是否适合关于 JWT的验证的流程客户端请求接口登录,原创 2020-06-06 10:04:38 · 1381 阅读 · 0 评论 -
Eggjs笔记:解决API接口跨域请求时cookie和session失效的问题
问题的出现当我们打开浏览器访问,从一个页面跳转到另一个页面,session中的信息仍可以正常访问,为什么在请求API接口的时候, 一个接口可以访问到,另一个却无法访问到session中的信息了呢? 其实这个问题很简单,session是基于cookie的,浏览器可以在访问的时候通过cookie来确认用户权限,而接口API的直接访问是没有cookie等信息的, 这里涉及到一个cookie跨域的问题,所以无法获取session的信息,那如何在API接口中共享session信息呢?解决方案就是前端+后端的方式来支原创 2020-06-05 13:42:51 · 1890 阅读 · 3 评论 -
Eggjs笔记:RESTful API的设计
关于RESTful API网络应用程序,分为前端和后端两个部分。当前的发展趋势,就是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备…)。因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信。这导致 API 构架的流行,甚至出现"API First"的设计思想RESTful API 是目前比较成熟的一套互联网应用程序的API设计理论,在企业中用的也非常多。RESTful API 也有不一些不足:(字段冗余,扩展性差、无法聚合 api、无法定义数据类型、网络请求次数多)等不足Graph原创 2020-06-05 12:53:25 · 875 阅读 · 0 评论 -
Eggjs笔记:Eggjs集成ElasticSearch及CRUD操作
相关文档https://www.elastic.co/guide/index.htmlhttps://www.elastic.co/guide/en/elasticsearch/clienthttps://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/configuration.htmlhttps://www.elastic.co/guide/en/elasticsearch/client/javascrip原创 2020-06-05 10:41:07 · 3236 阅读 · 3 评论 -
Eggjs笔记:ElasticSearch全文搜索引擎之安装, 配置中文分词插件, 以及CRUD操作
关于ESElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索。稳定,可靠,快速,安装使用方便。可以把ES当做是MongoDB来用,mongodb中也有全文搜索引擎,需要商业付费。官网:https://www.elastic.co/下载:https:原创 2020-06-04 22:52:53 · 1547 阅读 · 0 评论 -
Eggjs笔记:用户注册之短信相关功能
短信相关服务相关厂商聚合数据: https://www.juhe.cn/service云片: https://www.yunpian.com/阿里云,腾讯,百度等都有提供短信接口选择适合自己的一款一般性接入流程这里用云片的服务来做说明, https://www.yunpian.com/注册账户并实名认证后台管理系统的控制台中创建签名, 签名显示在短信内容的最前面,显示这条短信来自哪家公司/产品/网站。因运营商要求,签名需经过审核。后台管理系统的控制台中创建模板找sdk以及官方文档实原创 2020-06-03 22:35:53 · 990 阅读 · 0 评论 -
Eggjs笔记:接入微信支付相关流程与演示
概述准备个体工商户、企业、政府及事业单位https://pay.weixin.qq.com/static/applyment_guide/applyment_detail_website.shtml需要获取内容:appid:应用 APPID(必须配置,开户邮件中可查看)MCHID:微信支付商户号(必须配置,开户邮件中可查看)KEY:API 密钥,参考开户邮件设置(必须配置,登录商户平台自行设置)32位的密钥注册商户平台,申请微信支付需 1~5个工作日审核注册微信商户平台原创 2020-06-03 19:42:20 · 2124 阅读 · 0 评论 -
Eggjs笔记:接入支付宝支付相关流程与演示
Eggjs笔记:支付宝支付相关流程与演示概览接入支付宝必须注册企业支付宝账户支付宝开发接入页面:https://open.alipay.com/developmentAccess/developmentAccess.html点击支付应用填写对应应用名称, 点击创建创建以后进入概览页面, 上传应用图标设置应用公钥,提交审核接口加密签名下载签名工具:https://opendocs.alipay.com/open/291/106097/选择非Java(java语言还是选择java原创 2020-06-03 11:01:07 · 1883 阅读 · 3 评论 -
Eggjs笔记:egg-mysql插件的集成, curd操作, 事务演示
egg-mysql的安装配置在 egg 项目中安装 egg-mysql $ npm i egg-mysql --save启用egg-mysql插件// 在 {app_root}/config/plugin.js 中exports.mysql = { enable: true, package: 'egg-mysql'};在配置文件中配置mysql数据库连接地址// ...原创 2020-04-05 05:39:53 · 1512 阅读 · 0 评论 -
Eggjs笔记:egg-mongoose插件的集成,crud操作, 多表关联查询
Egg 中的 modelapp/model/** 用于放置领域模型,可选,由领域类相关插件约定。Loader : Egg 在 Koa 的基础上进行增强最重要的就是基于一定的约定根据功能差异将代码放到不同的目录下管理,对整体团队的开发成本提升有着明显的效果,Loader 实现了这套约定,并抽象了很多底层API可以进一步扩展Loader还提供了caseStyle强制指定首字母大小写,比如加载...原创 2020-04-04 14:04:31 · 1391 阅读 · 0 评论 -
Eggjs笔记:详解Mongoose的聚合管道以及populate实现关联查询
基于mongodb的聚合管道此处忽略之前mongodb在eggjs中需要配置的步骤,前文已有说明,现在开始在controller中调用(应该封装到service中的,仅作为示例)const result = await this.app.mongo.aggregate('order', { pipeline: [ { $lookup: {...原创 2020-04-04 10:25:07 · 1825 阅读 · 0 评论 -
Eggjs笔记:Mongoose的数据校验
Mongoose 校验参数required: 表示这个数据必须传入max: 用于Number类型数据,最大值min: 用于Number类型数据,最小值enum: 枚举类型,元素需要字符类型, 要求数据必须满足枚举值,必须在枚举列表中,enum: [‘0’, ‘1’, ‘2’]match: 增加的数据必须符合 match(正则)的规则maxlength: 最大长度minlength:...原创 2020-04-04 08:04:25 · 579 阅读 · 0 评论 -
Eggjs笔记:MongoDB索引、explain及Mongoose索引、内置CURD、扩展Mongoose Model的静态和实例方法
关于索引索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得更快MongoDB 的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的查询优化技巧创建索引 $ db.user.ensureIndex({"username":1})获取当前集合的索引 $ db.user.getIndexes()删除索引 $ db.user.dropIndex({"user......原创 2020-04-03 20:26:45 · 884 阅读 · 0 评论 -
Eggjs笔记:Mongoose预定义模式修饰符Getters与Setters自定义修饰符
Mongoose 预定义模式修饰符lowercase、uppercase 、trimmongoose 提供的预定义模式修饰符,可以对我们增加的数据进行一些格式化在定义Schema时进行处理var UserSchema=mongoose.Schema({ name:{ type:String, trim:true }, ag......原创 2020-04-03 16:41:59 · 369 阅读 · 0 评论 -
Eggjs笔记:Mongoose的CRUD,默认参数,模块化
关于MongooseMongoose 是在 node.js 异步环境下对 mongodb 进行便捷操作的对象模型工具Mongoose是 NodeJS 的驱动,不能作为其他语言的驱动是nodejs操作数据库的一个模块,更安全,更方便特点通过关系型数据库的思想来设计非关系型数据库基于 mongodb 驱动,简化操作Mongoose的安装以及使用官网:https://mongo......原创 2020-04-03 13:31:29 · 586 阅读 · 0 评论 -
Eggjs笔记:详解MongoDB聚合管道
MongoDB 聚合管道聚合管道: Aggregation Pipeline使用聚合管道可以对集合中的文档进行变换和组合用于表关联查询、数据的统计MongoDB 中使用 db.COLLECTION_NAME.aggregate([{<stage>},...]) 方法来构建和使用聚合管道在特定版本的MongoDB中才能使用 versions >= 3.2官网示例......原创 2020-04-03 09:05:43 · 866 阅读 · 0 评论