构建千万级高可用企业级Node.js应用【Z新】

358 阅读2分钟

Download: 构建千万级高可用企业级Node.js应用

我们都知道JavaScript先天就缺乏一种功能:模块。浏览器环境的js模块划分只能通过src引入使用。然而,我们是辛运的的,我们在身在这个前端高速发展的时代*(当然了,这也是一种压力,一觉醒来又有新东西诞生了)*。高速发展下社区总结出了CommonJS这算得上是最为重要的里程碑。CommonJS制定了解决这些问题的一些规范,而Node.js就是这些规范的一种实现。Node.js自身实现了require方法作为其引入模块的方法,同时NPM也是基于CommonJS定义的包规范

Node模块
每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。commonJS这套规范的出现使得用户不必再考虑变量污染,命名空间这些问题了。

小示例
// add.jsconst add = (a, b)=>{ return a+b}=============================// index.jsconst add = require(‘./add’)let result = add(1, 2)console.log(result)

1.模块引用
require()这个方法存在接受一个模块标识,以此引入模块

const fs = require(‘fs’)

Node中引入模块要经历一下三步:

路径分析

文件定位

编译执行

Node优先从缓存中加载模块。Node的模块可分为两类:

Node提供的核心模块

用户编写的文件模块

Node核心模块加载速度仅次于缓存中加载,然后路径形式的模=模块次之,最慢的是自定义模块。

2.模块定义
在模块中,上下文提供了exports来到处模块的方法或者变量。它是唯一出口

exports.add = function(){ // TODO}

在模块中还存在一个module对象,它代表模块自身,exports是它的属性。为了方便,Node为每个模块提供一个exports变量,指向module.exports。这等同在每个模块头部,有一行这样的命令

var exports = module.exports

async模块是为了解决嵌套金字塔,和异步流程控制而生.常用的方法介绍

npm 安装好async模块,然后引入就可以使用 var async = require(‘async’);

  1. series(tasks,[callback])

多个函数从上到下依次执行,相互之间没有数据交互

var task1 =function(callback){

console.log(“task1”);

callback(null,“task1”)

}

var task2 =function(callback){

console.log(“task2”);

callback(null,“task2”)

}

var task3 =function(callback){

console.log(“task3”);

callback(null,“task3”)

}

async.series([task1,task2,task3],function(err,result){

console.log(“series”);

if (err) {

console.log(err);

}

console.log(result);

})

var task1 =function(callback){

console.log(“task1”);

callback(null,“task1”)

}

var task2 =function(callback){

console.log(“task2”);

callback(“err”,“task2”)

}

var task3 =function(callback){

console.log(“task3”);

callback(null,“task3”)

}

async.series([task1,task2,task3],function(err,result){

console.log(“series”);

if (err) {

console.log(err);

}

console.log(result);