node.js入门学习(2)模块系统

什么是模块系统

为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统。

模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码、JSON 或者编译过的C/C++ 扩展。(摘自菜鸟教程)

新建一个自己的模块

创建一个tianqicode.js的文件

function service(request,response) {

	//设置返回代码为200,以及将返回格式为text/plain
	response.writeHead(200,{'Content-Type' : 'text/plain'});
	
	//返回内容是:Hello Node.js
	response.end('Hello Node.js');
	
}

//定义一个sayHello()函数
function sayHello() {
	console.log('hello from tianqicode.js');
}

//通过 exports 对象把 hi作为模块函数sayHello()的访问接口
exports.hi = sayHello;

//通过 exports 对象把 service 作为模块函数service()的访问接口
exports.service = service;

这时候使用server.js来加载我们的自定义模块,在server.js 中通过 require(’./tianqicode’) 加载这个模块,然后就可以直接访 问 tianqicode.js 中 exports 对象的成员函数了。


	//引入http模块
	var http = require('http');
	//引入tianqicode模块
	var tianqicode = require('./tianqicode');

	//调用hi()函数,间接的调用了tianqicode.js里面的sayHello()函数
	tianqicode.hi();

	//基于tianqicode.service()函数创建服务
	var server = http.createServer(tianqicode.service);

	//服务器监听8088端口
	server.listen(8088);

打开控制台运行server.js
可以看到控制台输出
在这里插入图片描述
有时候我们只是想把一个对象封装到模块中,格式如下:

module.exports = function() {
  // ...
}

例如

//hello.js 
function Hello() { 
    var name; 
    this.setName = function(thyName) { 
        name = thyName; 
    }; 
    this.sayHello = function() { 
        console.log('Hello ' + name); 
    }; 
}; 
module.exports = Hello;

这样就可以直接获取这个对象了
注:exports 和 module.exports 的使用:
如果要对外暴露属性或方法,就用 exports 就行,要暴露对象(类似class,包含了很多属性和方法),就用 module.exports。

//main.js 
var Hello = require('./hello'); 
hello = new Hello(); 
hello.setName('BYVoid'); 
hello.sayHello(); 

服务端的模块放在哪里

在学习模块之前,就已经用到过这样的语句

var http = require('http');

Node.js 中自带了一个叫做 http 的模块,我们在我们的代码中请求它并把返回值赋给一个本地变量。
这把我们的本地变量变成了一个拥有所有 http 模块所提供的公共方法的对象。
由于 Node.js 中存在 4 类模块(原生模块和3种文件模块)
在这里就不做了解了。

发布了30 篇原创文章 · 获赞 2 · 访问量 634

猜你喜欢

转载自blog.csdn.net/qq_43585377/article/details/102634811