文章目录

1、新模块count.js,输出数组

2、app.js模块调用count.js模块

3、模块之更多内容之间的调用

4、多种写法演示

(1)count.js模块中module.exports 暴露内容写法演示

(2)app.js模块中require请求内容写法演示

5、有的内容不暴露


上一篇文章我们介绍了nodejs的回调函数 Node.js后端开发 - 基础篇 #3 回调函数,这篇文章我们继续介绍nodejs相关知识点——nodejs的模块,废话不多说,下面我们来看看nodejs的模块是怎样的?

1、新模块count.js,输出数组

一个大项目那肯定是分成一个个模块的,一般来说一个文件就是一个模块,我们在原有的项目中再创建一个文件count.js,

nodejs typescrip后端服务 nodejs后端开发实例_前端

然后在里面添加代码,代码示例如下:

var counteFlag = function(arr) {
    return "有"+ arr.length + "个元素在数组中";
}

console.log(counteFlag(["java", "android", "nodejs"]));

我们来看一下输出结果:

bogon:hello-nodejs luminal$ node count
有3个元素在数组中
bogon:hello-nodejs luminal$

2、app.js模块调用count.js模块

那我们现在怎么在 app.js 里面来使用 count.js 这个模块呢?

count.js我们需要在里面这么写,如下:

var countFlag = function(arr) {
    return "有"+ arr.length + "个元素在数组中";
}

//console.log(countFlag(["java", "android", "nodejs"]));

//modules.exports意思是指定要暴露的内容。
//这里暴露的是counter表达式函数
module.exports = countFlag;

app.js我们需要在里面这么写,进行调用,如下:

// './count' 其中这个点代表当前目录,不用写点js
//另外需要注意的是它是单引号,不是双引号
var countFlag = require('./count');

console.log(countFlag(["java", "android", "nodejs"]));

我们来看一下输出结果:

bogon:hello-nodejs luminal$ node app
有3个元素在数组中
bogon:hello-nodejs luminal$

总结:

我们可以看到count.js代码,module.exports 关键字暴露内容

我们可以看到app.js代码,require关键字请求内容

3、模块之更多内容之间的调用

上面其实就是模块之间函数(方法)的调用,下面我们来看看更多内容之间的调用,我们改一下count.js里面的代码,如下

var countFlag = function(arr) {
    return "有"+ arr.length + "个元素在数组中";
}

var pi = 3.1415926;

var sumFlag = function (a,b) {
    //这个是es6写法,这个不是单引号,
    //` `它是我们键盘1左边的那个符号,
    //然后它插入了一个求和表达式。
    return `a和b两个数的和为 ${a+b}`;
}

module.exports.countFlag = countFlag;
module.exports.pi = pi;
module.exports.sumFlag = sumFlag;

我们可以理解,module.exports暴露对象,这个对象有三个键module.exports.countFlag/pi/sumFlag,然后把countFlag、pi、sumFlag三个值依次赋值过去。

再修改aap.js里面的代码,如下:

var stuff = require('./count');

console.log(stuff.countFlag(["java", "android", "nodejs"]));
console.log(stuff.pi);
console.log(stuff.sumFlag(3,5));

我们可以理解,require请求得到的是一个对象,然后这个对象找到对应的暴露内容

我们来看一下输出结果:

bogon:hello-nodejs luminal$ node app
有3个元素在数组中
3.1415926
a和b两个数的和为 8
bogon:hello-nodejs luminal$

4、多种写法演示

(1)count.js模块中module.exports 暴露内容写法演示

var countFlag = function(arr) {
    return "有"+ arr.length + "个元素在数组中";
}

var pi = 3.1415926;

var sumFlag = function (a,b) {
    return `a和b两个数的和为 ${a+b}`;
}

//写法一
// module.exports.countFlag = countFlag;
// module.exports.pi = pi;
// module.exports.sumFlag = sumFlag;

//写法二
module.exports = {
    countFlag : countFlag,
    pi : pi,
    sumFlag : sumFlag
}

count.js中module.exports 暴露内容写法演示三

var pi = 3.1415926;

var sumFlag = function (a,b) {
    return `a和b两个数的和为 ${a+b}`;
}

//写法三:把匿名方法直接写里面了
module.exports = {
    countFlag : function (arr) {
        return "有" + arr.length + "个元素在数组中";
    },
    pi : pi,
    sumFlag : sumFlag
}

(2)app.js模块中require请求内容写法演示

//写法演示一
// var stuff = require('./count');

// console.log(stuff.countFlag(["java", "android", "nodejs"]));
// console.log(stuff.pi);
// console.log(stuff.sumFlag(3,5));

//写法演示二
var stuff = require('./count');
var pi = require('./count').pi;

console.log(stuff.countFlag(["java", "android", "nodejs"]));
console.log(pi);
console.log(stuff.sumFlag(3, 5));

5、有的内容不暴露

如 pi 我们把它不暴露出来,修改后的count.js模块代码,如下:

var pi = 3.1415926;

var sumFlag = function (a,b) {
    return `a和b两个数的和为 ${a+b+pi}`;
}

//写法三
module.exports = {
    countFlag : function (arr) {
        return "有" + arr.length + "个元素在数组中";
    },
    //pi : pi,
    sumFlag : sumFlag
}

修改后的app.js模块代码,如下:

var stuff = require('./count');
//var pi = require('./count').pi;

console.log(stuff.countFlag(["java", "android", "nodejs"]));
//console.log(pi);
console.log(stuff.sumFlag(3, 5));

我们来看一下输出结果:

bogon:hello-nodejs luminal$ node app
有3个元素在数组中
a和b两个数的和为 11.1415926
bogon:hello-nodejs luminal$