centos安装node环境

0 人评论
  作者: Avrit   分类:学习   浏览:20

一、安装wget

yum install -y wget

二、下载node最新的安装包

wget https://nodejs.org/dist/v12.13.0/node-v12.13.0-linux-x64.tar.xz

三、依次执行下面命令解压安装包

xz -d node-v12.13.0-linux-x64.tar.xztar -xf node-v12.13.0-linux-x64.tar

 

安装xz,

yum install xz 即可

四、部署bin文件,即全局配置node环境

ln -s ~/node-v12.13.0-linux-x64/bin/node /usr/bin/nodeln -s ~/node-v12.13.0-linux-x64/bin/npm /usr/bin/npm

 

五、测试

node -v
npm -v

 

补充:

查看linux服务器信息

uname -v

删除软连接

rm -rf /usr/bin/npmrm -rf /usr/bin/node

 配置淘宝镜像

$ npm install -g cnpm --registry=https://registry.npm.taobao.org

 全局配置cnpm

ln -s ~/node-v12.13.0-linux-x64/bin/cnpm /usr/bin/cnpm

TypeScript基础类型,类实例和函数类型声明

0 人评论
  作者: Avrit   分类:学习   浏览:30

TypeScript(TS)是微软研发的编程语言,是JavaScript的超集,也就是在JavaScript的基础上添加了一些特性.其中之一就是类型声明.

一、基础类型

TS的基础类型有 Boolean,Number,String,Array,Tuple,Enum,Any,Void,Null,Undefined,Never,Object.

==布尔类型 Boolean==

let isDone: boolean = false *在变量名后用冒号:T(T 代表TS的类型)声明变量的类型。

==数字类型 Number==

阅读全文>>

typescript进阶篇之高级类型与条件类型(Readonly, Partial, Pick, Record)

0 人评论
  作者: Avrit   分类:学习   浏览:26

高级类型
lib 库中的五个高级类型
以下所有例子皆以 person 为例

interface Person {
    name: string;
    age?: number;
}
Partial
源码:

type Partial<T> = {
    [P in keyof T]?: T[P];
};

阅读全文>>

mongoose --- populate主要操作以及简单和$lookup对比

0 人评论
  作者: Avrit   分类:学习   浏览:45
简单的创建声明三张表:user/department/project

const UserSchema = new mongoose.Schema({
  username: { type: String, required: true },
  password: { type: String, required: true },

阅读全文>>

Node.js事件循环

0 人评论
  作者: Avrit     浏览:54

什么是事件循环

事件循环允许Node.js执行一些异步非阻塞I/O操作的机制或者策略。

尽管JavaScript是单线程的,所以这些操作都尽量交给操作系统的内核去做。 大多数现代操作系统内核都是多线程的,所以它们可以处理在后台执行的多个操作。当其中一个操作完成时,内核会告诉Node.js,将适当的回调添加到轮询队列中,以便最终执行。

事件循环的6个阶段

当Node.js启动时,会初始化事件循环,然后处理在Node.js里运行的代码,包括各种API的调用,定时器,process.nextTick(),然后运行事件循环机制。

事件循环

6阶段都分别做了什么?

  • timers: setTimeout(),setInterval()在这个阶段被执行
  • pending callbacks: 执行一些系统错误的处理,比如TCP,UDP,Socket错误等等。
  • idle, prepare: only used internally.
  • poll: 轮询阶段,向系统获取新的I/O事件,执行I/O回调。首先会先处理到期的定时器的回调,然后处理poll队列里的回调,直到队列里的回调全部被清空,或者达到一个处理的最大值,如果poll队列不为空且刚好有setImmediate,则停止当前的poll阶段,前往check阶段,执行setImmediate回调。如果没有setImmediate,Node.js会去查看有没有定时器任务到期了,如果有的话,就前往timers阶段,执到期行定时器的回调。
    retrieve new I/O events; execute I/O related callbacks (almost all with the exception of close callbacks, the ones scheduled by timers, and setImmediate()); node will block here when appropriate.
  • check: 执行setImmediate() 回调,且setImmediate只能在check阶段执行。
  • close callbacks: 执行结束的回调。

每个阶段都有一个FIFO回调队列要执行。虽然每个阶段都有其特殊的方式,但通常情况下,当事件循环进入给定阶段时,它将执行特定于该阶段的任何操作,然后在该阶段的队列中执行回调,直到队列耗尽或执行了最大数量的回调。当队列耗尽或达到回调限制时,事件循环将移动到下一个阶段,依此类推。

process.nextTick()

图中没有显示process.nextTick(),尽管它是异步API的一部分。这是因为process.nextTick()在技术上不是事件循环的一部分。 是在任意两个阶段中间,只要有process.nextTick()没有被执行,那么优先执行process.nextTick的回调。

测试代码

const { readFile } = require('fs');const EventEmitter = require('events');class EE extends EventEmitter{}const yy = new EE();
yy.on('event',() => {
    console.log('出大事了!');  //2 })

setTimeout(() => {  //5     console.log('0 毫秒到期执行的定时器回调')
},0)

setTimeout(() => { //     console.log('100 毫秒到期执行的定时器回调')
},100)

setTimeout(() => {  //     console.log('200 毫秒到期执行的定时器回调')
},200)

readFile('./package.json','utf-8',data => {
    console.log('完成文件1读操作的回调');  //7 })

readFile('./task.js','utf-8',data => {
    console.log('完成文件2读操作的回调');  //8 })

setImmediate(() => {
  console.log('immediate 立即回调'); //6 })

process.nextTick(() => { //1     console.log('process 的第一次回调');
})Promise.resolve()
.then(() => {
  yy.emit('event');  
  process.nextTick(() => {
    console.log('process 的第二次回调'); //5   }) 
  console.log('Promise的第一次回调'); //3 }).then(() => {
    console.log('Promise的第2次回调'); //4 })

执行结果是什么?
注:文件1,文件2的大小会影响操作结果。

process 的第一次回调
出大事了!Promise的第一次回调Promise的第2次回调
process 的第二次回调0 毫秒到期执行的定时器回调
immediate 立即回调
完成文件2读操作的回调
完成文件1读操作的回调100 毫秒到期执行的定时器回调200 毫秒到期执行的定时器回调

npm安装包参数配置说明

0 人评论
  作者: Avrit   分类:学习   浏览:42
通过npm install不加--save 和npm install --save一样 
都是局部安装并会把模块自动写入package.json中的dependencies里。

npm install --save 局部安装,并会把模块自动写如入package.json中的dependencies里。

npm install --dev局部安装,并会把模块自动写入package.json中的devDependencies里。

阅读全文>>

MongoDB aggregate 运用总结

0 人评论
  作者: Avrit   分类:学习   浏览:31

$project:包含、排除、重命名和显示字段

$match:查询,需要同find()一样的参数

$limit:限制结果数量

$skip:忽略结果的数量

$sort:按照给定的字段排序结果

$group:按照给定表达式组合结果

$unwind:分割嵌入数组到自己顶层文件

阅读全文>>

mongodb aggregate

0 人评论
  作者: Avrit   分类:学习   浏览:31

$Match

{

  $or:[

    {

      image_url: {

        $regex: '/b/'

      }

    },{

      id:1

    }

  ]

}

 

$Group

{

  _id: {

  serving: '$is_in_serving'

  },

  count:{

    $sum:1

  },

  list: {$push: '$$ROOT'} //push 上一次的查询结果到list

}

 

$Unwind

{

  path: '$list' //把list数组分开

}

 

$Project

{

  count:'$count',

  obj:'$list.title'

}

mongoDB中聚合(aggregate)的具体使用

0 人评论
  作者: Avrit   分类:学习   浏览:39

最近在学习mongoDB的使用,本文来介绍一下其中aggregate的具体使用

先来看一个分组的例子,本例中$group是一个管道操作符,获得的结果可以接着输出到下一个管道,而内部的$sum是一个表达式操作符。

用$group 举个例子

阅读全文>>

使用mongoose进行连表查询并分组($group),筛选($match),指定字段($project),批量查询($in)

0 人评论
  作者: Avrit   分类:学习   浏览:39
使用mongoose进行连表查询并分组($group),筛选($match),指定字段($project),批量查询($in)

阅读全文>>