# Nodejs-Roadmap
**Repository Path**: amateur_gang/Nodejs-Roadmap
## Basic Information
- **Project Name**: Nodejs-Roadmap
- **Description**: 【Nodejs-Roadmap】侧重于Node.js服务端的开发指南,公众号“Node.js技术栈”
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 2
- **Created**: 2020-07-28
- **Last Updated**: 2022-05-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Node.js技术栈
> 本文档是作者从事```Node.js Developer```以来的学习历程,旨在为大家提供一个较详细的学习教程,侧重点更倾向于Node.js服务端所涉及的技术栈,如果本文能为您得到帮助,请给予支持!
> 为 Node.js 面试及常见问题打造的一个项目 [:cn: Node.js 面试问题](https://interview.nodejs.red/#/zh/) | [:uk: Nodejs-Interview-Questions](https://interview.nodejs.red)
**如何支持:**
- 搜索公众号 **```Node.js技术栈```** 进行关注
- 点击右上角Star :star: 给予关注
- 分享给您身边更多的小伙伴
> **作者:** 五月君,Node.js Developer,[慕课网认证作者](https://www.imooc.com/u/2667395)。
[```JavaScript```](#JavaScript)| [`ECMAScript6`](#ECMAScript6) | [`Node.js`](#Nodejs) | [`DataBase`](#DataBase) | [`Microservice`](#Microservice) | [`HTTP`](#HTTP协议) | [`DevOps`](#DevOps) | [`工具`](#工具) | [`资料`](#资料)
:-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-:
**Node.js技术栈在线预览:** [https://www.nodejs.red/](https://www.nodejs.red/)
## JavaScript
- **基础** [[more]](/docs/javascript/base.md)
- ```[基础]``` [常见问题](/docs/javascript/base.md#常见问题)
- ```[基础]``` [undefined与undeclared的区别?](/docs/javascript/base.md#undefined与undeclared的区别)
- ```[基础]``` [typeof、instanceof 类型检测](/docs/javascript/base.md#类型检测)
- ```[作用域]``` [eval()、with 欺骗词法作用域](/docs/javascript/base.md#欺骗词法作用域)
- ```[Error]``` [错误类型ReferenceError、TypeError的区别?](/docs/javascript/base.md#错误)
- ```[面试]``` ```编写一个函数实现多维数组去重?```,参考:[数组去重的三种实现方式](/docs/javascript/base.md#数组去重的三种实现方式)
- ```[面试]``` ```实现对多维数组降维?```,参考:[数组降维--扁平化多维数组](/docs/javascript/base.md#数组降维)
- **This** [[more]](/docs/javascript/this.md)
* ```[This指向]``` [指向自身](/docs/javascript/this.md#指向自身)、[指向函数的作用域](/docs/javascript/this.md#指向函数的作用域)
* ```[绑定规则]``` [默认绑定](/docs/javascript/this.md#默认绑定)、 [隐式绑定](/docs/javascript/this.md#隐式绑定)、[显示绑定](/docs/javascript/this.md#显示绑定)、[new绑定](/docs/javascript/this.md#new绑定)
- **函数** [[more]](/docs/javascript/func.md)
- ```[Function]``` [函数声明与函数表达式](/docs/javascript/func.md#函数声明与函数表达式)
- ```[Function]``` [内置函数](/docs/javascript/func.md#内置函数)
- ```[Function]``` [arguments对象](/docs/javascript/func.md#arguments对象)
- ```[Function]``` [call和apply的使用与区别?](/docs/javascript/func.md#call和apply的使用与区别)
- ```[Function]``` [引用传递](/docs/javascript/func.md#引用传递)
- ```[面试]``` ``` 递归调用实现一个阶乘函数? ```,参考:[arguments对象](/docs/javascript/func.md#arguments对象)
- ```[面试]``` ```如何理解JavaScript中的引用传递与值传递?JS中是否拥有引用传递?```,参考:[引用传递](/docs/javascript/func.md#引用传递)
- ```[面试]``` ```经典面试题:什么是匿名函数和闭包?```,参考:[深入理解匿名函数与闭包](/docs/javascript/func.md#深入理解匿名函数与闭包)
- **对象** [[more]](/docs/javascript/object.md)
* ```[Object]``` [创建对象的四种方法](/docs/javascript/object.md#创建对象的四种方法):[对象字面量](/docs/javascript/object.md#对象字面量创建)、[new关键字构造形式](/docs/javascript/object.md#使用new关键字构造形式创建)、[create方法](/docs/javascript/object.md#对象的create方法创建)、[原型prototype创建](/docs/javascript/object.md#原型prototype创建)
* ```[面试]``` ``` 什么是引用传递?{} == {} 是否等于true ```,参考:[对象引用类型示例分析](/docs/javascript/object.md#引用类型示例分析)
* ```[面试]``` ``` 如何编写一个对象的深度拷贝函数? ```,参考:[对象copy实现](/docs/javascript/object.md#对象copy实现)
* ```[面试]``` ``` new操作符具体做了哪些操作,重要知识点! ```,参考:[使用new关键字构造形式创建](/docs/javascript/object.md#使用new关键字构造形式创建)
- **原型** [[more]](/docs/javascript/prototype.md)
* ```[ProtoType]``` [原型概念](/docs/javascript/prototype.md#原型概念)
* ```[ProtoType]``` [原型模式的执行流程](/docs/javascript/prototype.md#原型模式的执行流程)
* ```[ProtoType]``` [构造函数实例属性方法](/docs/javascript/prototype.md#构造函数实例属性方法)
* ```[ProtoType]``` [构建原型属性方法](/docs/javascript/prototype.md#构建原型属性方法)
* ```[ProtoType]``` [原型字面量创建对象](/docs/javascript/prototype.md#原型字面量创建对象)、[字面量创建对象](/docs/javascript/prototype.md#字面量创建对象)、[构造函数创建对象](/docs/javascript/prototype.md#构造函数创建对象)
* ```[ProtoType]``` [原型的实际应用](/docs/javascript/prototype.md#原型的实际应用)、[jquery中原型应用](/docs/javascript/prototype.md#jquery中原型应用)、[zepto中原型的应用](/docs/javascript/prototype.md#zepto中原型的应用)
* ```[面试]``` 如何实现原型的扩展?,参考:[原型的扩展](/docs/javascript/prototype.md#原型的扩展)
- **正则** [[more]](/docs/javascript/regexp.md)
- ```[RegExp]``` [模式修饰符参数](/docs/javascript/regexp.md#模式修饰符参数)
- ```[RegExp]``` [两个测试方法](/docs/javascript/regexp.md#两个测试方法)
- ```[RegExp]``` [4个正则表达式方法](/docs/javascript/regexp.md#4个正则表达式方法)
- ```[RegExp]``` [匹配模式](/docs/javascript/regexp.md#匹配模式)
- ```[RegExp]``` [常用正则表达式](/docs/javascript/regexp.md#常用正则表达式)
## ECMAScript6
- **变量声明** [[more]](/docs/es6/readme.md)
- ```[Variable]``` [新增let&const变量声明](/docs/es6/readme.md#新增声明变量)
- **解构赋值** [[more]](/docs/es6/readme.md#解构赋值)
- ```[Deconstruction]``` [数组解构赋值](/docs/es6/readme.md#数组解构赋值)
- ```[Deconstruction]``` [对象解构赋值](/docs/es6/readme.md#对象解构赋值)
- **扩展系列** [[more]](/docs/es6/readme.md#解构赋值)
- ```[Extension]``` [正则表达式扩展](/docs/es6/readme.md#正则表达式扩展)
- ```[Extension]``` [字符串扩展](/docs/es6/readme.md#字符串扩展)
- ```[Extension]``` [数值扩展](/docs/es6/readme.md#数值扩展)
- ```[Extension]``` [数组扩展](/docs/es6/readme.md#数组扩展)
- ```[Extension]``` [函数扩展](/docs/es6/readme.md#函数扩展)
- ```[Extension]``` [对象扩展](/docs/es6/readme.md#对象扩展)
- **集合系列** [[more]](/docs/es6/set-map.md#解构赋值)
- ```[Set]``` [集合Set](/docs/es6/set-map.md#set)、[WeakSet](/docs/es6/set-map.md#weakset)
- ```[Map]``` [集合Map](/docs/es6/set-map.md#map)、[WeakMap](/docs/es6/set-map.md#weakmap)
- ```[Map-Array]``` [Map与Array横向对比增、查、改、删](/docs/es6/set-map.md#map与array对比)
- ```[Set-Array]``` [Set与Array增、查、改、删对比](/docs/es6/set-map.md#set与array)
- ```[Map-Set-Array]``` [Map、Set、Object三者增、查、改、删对比](/docs/es6/set-map.md#集合map集合set对象三者对比)
- **Promise** [[more]](/docs/es6/promise.md)
- ```[Promise]``` [Promise的基本使用和原理](/docs/es6/promise.md#promise的基本使用和原理)
- ```[Promise]``` [Callback方式书写](/docs/es6/promise.md#callback方式书写)
- ```[Promise]``` [Promise方式书写](/docs/es6/promise.md#promise方式书写)
- ```[Promise]``` [Promise.finally()](/docs/es6/promise.md#finally)
- ```[Promise]``` [Promise并行执行 Promise.all()](/docs/es6/promise.md#promise并行执行)
- ```[Promise]``` [Promise率先执行 Promise.race()](/docs/es6/promise.md#promise率先执行)
- ```[Promise]``` [错误捕获](/docs/es6/promise.md#错误捕获)
- ```[面试]``` ```Promise 中 .then 的第二参数与 .catch 有什么区别?```,参考:[错误捕获](/docs/es6/promise.md#错误捕获)
- ```[面试]``` ```怎么让一个函数无论promise对象成功和失败都能被调用?```,参考:[finally](/docs/es6/promise.md#finally)
- **Decorators** [[more]](/docs/es6/decorators.md)
- **Symbol** [[more]](/docs/es6/symbol.md)
- **Generator** [[more]](/docs/es6/generator.md)
## Nodejs
- **模块** [[more]](/docs/nodejs/module.md)
- ```[Module]``` [模块的分类](/docs/nodejs/module.md#模块的分类):[系统模块](/docs/nodejs/module.md#系统模块)、[第三方模块](/docs/nodejs/module.md#第三方模块)
- ```[Module]``` [模块加载机制](/docs/nodejs/module.md#模块加载机制)
- ```[Module]``` [模块循环引用](/docs/nodejs/module.md#模块循环引用)
- ```[面试]``` ```require的加载机制? ```,参考:[模块加载机制](/docs/nodejs/module.md#模块加载机制)
- ```[面试]``` ```module.exports与exports的区别```,参考:[module.exports与exports的区别](/docs/nodejs/module.md#module.exports与exports的区别)
- ```[面试]``` ``` 假设有a.js、b.js两个模块相互引用,会有什么问题?是否为陷入死循环?```,参考:[#](/docs/nodejs/module.md#问题1)
- ```[面试]``` ``` a模块中的undeclaredVariable变量在b.js中是否会被打印?```,参考:[#](/docs/nodejs/module.md#问题2)
- **事件轮询(Event Loop)** [[more]](/docs/nodejs/event-loop.md)
- `[EventLoop]` [线程模型、EventLoop介绍](/docs/nodejs/event-loop.md#线程模型)
- `[I/O]`[操作系统I/O模型及轮询技术演变](/docs/nodejs/event-loop.md#操作系统的轮询技术演进)
- `[I/O]`[白话风格(小明与妹子的邂逅)讲解I/O演进](/docs/nodejs/event-loop.md#白话风格)
- `[Node.js-EventLoop]` [Node.js中的Event Loop](/docs/nodejs/event-loop.md#Node.js中的EventLoop)
- `[Browser-EventLoop]` [浏览器中的Event Loop](/docs/nodejs/event-loop.md#浏览器中的EventLoop)
- `[Interview]` ``` I/O多路复用轮询技术select和epoll的区别? ```,参考:[#](/docs/nodejs/event-loop.md#select和epoll的区别)
- **中间件** [[more]](/docs/nodejs/middleware.md)
- ```[Mddleware]``` [常用Web框架&中间件汇总](/docs/nodejs/middleware.md)
- **缓存**
- `[Cache]` [memory-fs 将文件写入内存](https://github.com/webpack/memory-fs)
- `[Cache]` [Memory Cache](https://github.com/ptarjan/node-cache#readme)
- `[Cache]` [Node Cache](https://github.com/mpneuried/nodecache)
- **定时任务**
- `[Schedule]` [node-schedule ](https://github.com/node-schedule/node-schedule)
- `[Schedule]` [Agenda 将Node中的定时任务存储在数据库中(官方推荐MongoDB)](https://github.com/agenda/agenda)
- `[Schedule]` [Node.js结合RabbitMQ延迟队列实现定时任务](/docs/microservice/rabbitmq-base.md#RabbitMQ延迟队列实现定时任务)
- **模板引擎**
- `[Template]` [Ejs](https://ejs.co/)
- `[Template]` [Handlebarsjs](https://handlebarsjs.com/)
- `[Template]` [Jade](http://jade-lang.com/)
- **日志记录收集** [[more]](/docs/nodejs/logger.md)
- `[Logger]` [Sentry--错误日志收集框架](https://sentry.io/welcome/)
- `[Logger]` [log4js 日志记录工具](https://github.com/log4js-node/log4js-node)
- `[Logger]` [ELK--开源的日志分析系统](https://www.elastic.co/cn/products)
- `[Logger]` [winston日志模块](https://github.com/winstonjs/winston)
- **测试**
* `Unit Testing` [mocha NodeJS里最常用的测试框架](https://mochajs.org/)
* `Unit Testing` [chai 一个断言库](http://www.chaijs.com/api/)
* `Unit Testing` [Jest — Facebook推出的一款测试框架,集成了 Mocha,chai,jsdom,sinon等功能。](https://jestjs.io/)
* `BDD Testing` [Jasmine — 一款基于行为驱动的JavaScript测试框架](https://jasmine.github.io/)
* `Testing Tool` [istanbul Istanbul - a JS code coverage tool written in JS 测试覆盖率](https://github.com/gotwarlost/istanbul)
* `E2E Testing` [Puppeteer](https://github.com/GoogleChrome/puppeteer)
- **框架**
- `[Framework]` [Express 中文版](http://www.expressjs.com.cn/)、[Express of English Version](http://www.expressjs.com.cn/)
- `[Framework]` [Koa 中文版](https://koajs.com/)、[Koa of English Version](https://koajs.com/)
- `[Framework]` [Egg 中文版](https://eggjs.org/zh-cn/intro/quickstart.html)、[Egg of English Version](https://eggjs.org/en/intro/quickstart.html)
- `[Framework]` [Nest.js 中文版](https://docs.nestjs.cn/)、[Nest.js](https://docs.nestjs.com/)
- **ORM**
- `[typeorm]` [typeorm](https://typeorm.io/) 【右上角切换中文】
- `[sequelize]` [sequelize](http://docs.sequelizejs.com/)
- `[prisma]` [prisma](https://www.prisma.io/docs)
## DataBase
- **`Relational`**
* [MySql](https://www.mysql.com/)
* [SQL Server](https://www.microsoft.com/en-us/sql-server/sql-server-2017)
* [PostgreSQL](https://www.postgresql.org/)
* [Oracle](https://www.oracle.com/index.html)
- **`NoSQL`**
* [MongoDB](https://www.mongodb.com/)
* [Redis](https://redis.io/)
* [RocksDB](https://github.com/facebook/rocksdb/)、[RocksDB中文网](https://rocksdb.org.cn/)
* [CouchDB](http://couchdb.apache.org/)
- **Search Engines**
* [ElasticSearch](https://www.elastic.co/)
* [Solr](http://lucene.apache.org/solr/)
* [Sphinxsearch](http://sphinxsearch.com/)
## Microservice
- **服务注册发现之Consul** [[more]](/docs/microservice/consul.md)
- ```[Consul]``` [使用Consul解决了哪些问题](/docs/microservice/consul.md#使用consul解决了哪些问题)
- ```[Consul]``` [微服务Consul系列之服务部署、搭建、使用](/docs/microservice/consul.md#consul架构)
- ```[Consul]``` [微服务Consul系列之集群搭建](/docs/microservice/consul.md#集群搭建)
- ```[Consul]``` [微服务Consul系列之服务注册与服务发现](/docs/microservice/consul.md#服务注册与发现)
- ```[Question]``` [微服务Consul系列之问题汇总篇](/docs/microservice/consul.md#问题总结)
- **消息中间件之RabbitMQ** [[more]](/docs/microservice/rabbitmq-base.md)
- ```[RabbitMQ]``` [主流消息中间件简介](/docs/microservice/rabbitmq-base.md#主流消息中间件简介)
- ```[RabbitMQ]``` [RabbitMQ安装、部署、启动](/docs/microservice/rabbitmq-base.md#安装)
- Mac版安装
- Linux系统(Ubuntu、CentOS)安装
- 运行与启动
- `[QOS]` [RabbitMQ高级特性消费端限流策略实现](/docs/microservice/rabbitmq-base.md#RabbitMQ高级特性消费端限流策略实现)
- `[RabbitMQ]` [RabbitMQ延迟队列实现定时任务](/docs/microservice/rabbitmq-base.md#RabbitMQ延迟队列实现定时任务)
- **轻量级数据通信**
- `[RPC]` [gRPC 官方文档中文版](http://doc.oschina.net/grpc?t=57966)
- `[RPC]` [Apache Thrift](http://thrift.apache.org/)
- `[RPC]` [Apache Dubbo一款高性能Java RPC框架](http://dubbo.apache.org/zh-cn/index.html)
- `[HTTP]` [RESTful API 设计指南](http://www.ruanyifeng.com/blog/2014/05/restful_api.html) [Best Practices for Designing a Pragmatic RESTful API
](https://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api#versioning)
## HTTP协议
- **http三次握手** [[more]](https://github.com/Q-Angelo/http-protocol#http三次握手)
* `[HTTP三次握手]` [三次握手时序图](https://github.com/Q-Angelo/http-protocol#三次握手时序图)
* `[HTTP三次握手]` [三次握手数据包详细内容分析](https://github.com/Q-Angelo/http-protocol#三次握手数据包详细内容分析)
* `[HTTP三次握手]` [分析总结](https://github.com/Q-Angelo/http-protocol#总结)
* `[面试]` `说下TCP三次握手的过程?`,参考:[三次握手时序图](https://github.com/Q-Angelo/http-protocol#三次握手时序图)
- **跨域CORS** [[more]](https://github.com/Q-Angelo/http-protocol#跨域cors)
* `[CORS]` [跨域形成原理简介](https://github.com/Q-Angelo/http-protocol#跨域cors)
* `[CORS]` [实例来验证跨域的产生过程](https://github.com/Q-Angelo/http-protocol#示例)
* `[CORS]` [基于http协议层面的几种解决办法](https://github.com/Q-Angelo/http-protocol#基于http协议层面的几种解决办法)
* `[CORS]` [CORS预请求](https://github.com/Q-Angelo/http-protocol#cors预请求)
* `[面试]` `你之前遇见过跨域吗?说一下跨域的形成与实现。`,参考:[CORS](https://github.com/Q-Angelo/http-protocol#跨域cors)
- **缓存头Cache-Control的含义和使用**
* `[Cache-Control]` [可缓存性(public、private、no-cache)](https://github.com/Q-Angelo/http-protocol#可缓存性)
* `[Cache-Control]` [到期 (max-age、s-maxage、max-stale)](https://github.com/Q-Angelo/http-protocol#到期)
* `[Cache-Control]` [重新验证 (must-revalidate、proxy-revalidate)](https://github.com/Q-Angelo/http-protocol#重新验证)
* `[Cache-Control]` [其它 (no-store、no-transform)](https://github.com/Q-Angelo/http-protocol#其它)
* `[Cache-Control]` [缓存cache-control示例](https://github.com/Q-Angelo/http-protocol#缓存cache-control示例)
1. `[思考]` `在页面中引入静态资源文件,为什么静态资源文件改变后,再次发起请求还是之前的内容,没有变化呢?`,参考:[#](https://github.com/Q-Angelo/http-protocol#缓存cache-control示例)
2. `[思考]` `在使用webpack等一些打包工具时,为什么要加上一串hash码?`,参考:[#](https://github.com/Q-Angelo/http-protocol#缓存cache-control示例)
- **HTTP长链接**
* `[KeepAlive]` [http长链接简介](https://github.com/Q-Angelo/http-protocol#http长链接)
* `[KeepAlive]` [http/1.1中长链接的实现示例](https://github.com/Q-Angelo/http-protocol#http长链接)
* `[KeepAlive]` [长链接在http2中的应用与http/1.1协议中的对比](https://github.com/Q-Angelo/http-protocol#http长链接)
* `[面试]` `Chrome浏览器允许的一次性最大TCP并发链接是几个?`,参考:[HTTP长链接分析](https://github.com/Q-Angelo/http-protocol#http长链接)
- **Nginx服务配置**
* `[Nginx]` [Nginx安装启动](https://github.com/Q-Angelo/http-protocol#nginx安装启动)
* `[Nginx]` [修改hosts文件配置本地域名](https://github.com/Q-Angelo/http-protocol#修改hosts文件配置本地域名)
* `[Nginx]` [Nginx配置缓存](https://github.com/Q-Angelo/http-protocol#nginx配置缓存)
* `[Nginx]` [nginx部署https服务](https://github.com/Q-Angelo/http-protocol#nginx部署https服务)
* `[Nginx]` [实现http2协议](https://github.com/Q-Angelo/http-protocol#实现http2协议)
## DevOps
- **Node.js生产环境完整部署指南** [[more]](/docs/devops/node-deploy.md)
- ```[Node.js]``` [用户权限管理及登陆服务器](/docs/devops/node-deploy.md#用户权限管理及登陆服务器)
- ```[Node.js]``` [增强服务器安全等级](/docs/devops/node-deploy.md#增强服务器安全等级)
- ```[Node.js]``` [Node.js生产环境部署](/docs/devops/node-deploy.md#nodejs生产环境部署)
- ```[Node.js]``` [Nginx端口映射](/docs/devops/node-deploy.md#nginx映射)
- ```[Node.js]``` [Mongodb生产环境部署](/docs/devops/node-deploy.md#mongodb)
- ```[Node.js]``` [实现服务器与第三方仓库的关联-PM2代码部署](/docs/devops/node-deploy.md#本地代码同步第三方仓库进行生产部署)
- **NPM模块管理** [[more]](/docs/devops/npm-deploy.md)
- ```[NPM]``` [npm源设置](/docs/devops/npm-deploy.md#npm源设置)
- ```[NPM]``` [nnpm注册登录](/docs/devops/npm-deploy.md#npm注册登录)
- ```[NPM]``` [npm module 发布](/docs/devops/npm-deploy.md#npm-module-发布)
- ```[NPM]``` [可能遇到的问题](/docs/devops/npm-deploy.md#可能遇到的问题)
- **Linux系统问题汇总** [[more]](/docs/devops/linux-question.md)
## 工具
- **Git** [[more]](/docs/tools/git.md)
- ```[Git]``` [Git常用命令及日常问题集锦](/docs/tools/git.md)
- **SEO** [[more]](/docs/tools/seo.md)
- ```[SEO实战]``` [SEO网站优化title设置与快速排名](/docs/tools/seo.md)
- [Docsify 快速搭建个人博客](/docs/tools/docsify.md)
## 资料
- **书籍推荐** [[more]](/docs/materials/book.md)
- **Blog推荐** [[more]](/docs/materials/blog.md)
- **文章推荐** [[more]](/docs/materials/article.md)
## 转载分享
建立本开源项目的初衷是基于个人学习与工作中对 Node.js 相关技术栈的总结记录,在这里也希望能帮助一些在学习 Node.js 过程中遇到问题的小伙伴,如果您需要转载本仓库的一些文章到自己的博客,请按照以下格式注明出处,谢谢合作。
```
作者:五月君
链接:https://github.com/Q-Angelo/Nodejs-Roadmap
来源:Nodejs.js技术栈
```
## 参与贡献
1. 如果您对本项目有任何建议或发现文中内容有误的,欢迎提交 issues 进行指正。
2. 对于文中我没有涉及到知识点,欢迎提交 PR。
3. 如果您有文章推荐请以 markdown 格式到邮箱 `qzfweb@gmail.com`,[中文技术文档的写作规范指南](https://github.com/ruanyf/document-style-guide)。
## 联系我
- **加入群聊**
本群的宗旨是给大家提供一个良好的技术学习交流平台,所以杜绝一切广告!由于微信群人满 100 之后无法加入,请扫描下方二维码先添加作者 “五月君” 微信,备注:Node.js。
- **公众号**
专注于Node.js相关技术栈的研究分享,包括基础知识、Nodejs、Consul、Redis、微服务、消息中间件等,如果大家感兴趣可以给予关注支持!