nodejs如何引入node_global文件下的模块
在Node.js中,可以使用require函数来引入模块。Node.js中的require函数是用来加载模块的函数,它会按照搜索规则,搜索模块的文件路径,并返回模块的导出对象。
要引入nodeglobal文件夹下的模块,首先需要使用fs模块来读取nodeglobal文件夹下的文件列表,以查找模块所在的路径。
然后,可以使用require函数来引入模块,例如:
const myModule = require('nodeglobal/myModule.js');
这样一来,就可以引入nodeglobal文件夹下的模块了。
另外,也可以使用Node.js的path模块来构造模块文件的完整路径,然后再使用require函数来引入模块。例如:
const path = require('path');
const myModule = require(path.join(__dirname, 'nodeglobal', 'myModule.js'));
这样一来,就可以正确的引入nodeglobal文件夹下的模块了。
nodeJs初学--Nodejs中的querystring(查询字符串)模块
1、querystring 模块提供用于解析和格式化 URL 查询字符串的实用工具
直接在nodeJs环境中引入:
const querystring=require('querystring');
1.0 ------ 基础:parse 字符串转对象
默认是以 = 分割 键值对
例如 字符串 let string ='name=chenchengposswer=123456sex=0';
let obj = qs.parse(string);
输出对象 如图
1.1 ------ 拓展 如果不是分割键值对的不是 = 是其他的符号。
例如 字符串 以 # - 分割键值对的话
let string ='name#chencheng-posswer#123456-sex#0';
let obj = qs.parse(string,'-','#');
第一个参数 字符串
第二个参数 分割 键值对
第三个参数 分割 键值
2.0 ------ 基础:stringify 对象转字符串
例如: let obj = {name:'cc',age:'30',sex:'0'}
let string = qs.stringify(obj);
默认以 = 拼接 输出:'name=ccage=30sex=0';
2.1 ------ 拓展:stringify 不以默认分隔符分割
let string = qs.stringify(obj,'^','?');
输出: 'name?cc^age?30^sex?0';
常用NodeJS中的模块
五大核心模块:
http----开启一个Web服务,给浏览器提供服务
url----给浏览器发送请求用,还可以传递参数(GET)
querystring----处理浏览器通过GET/POST发送过来的参数
path----查找文件的路径
fs----在服务器端读取文件用的
自定义模块:
一个.js文件就可以看成一个模块,如果我们想把模块中定义的变量,方法,对象给外面的js使用,就必须提供module将我们需要给外面用的东西,导出去。
导入模块用 require,在模块中导出 使用module.exports。
如何加载Nodejs模块
nodejs的几种模块加载方式
一.直接在exports对象中添加方法
1. 首先创建一个模块(module.js)module.js
exports.One = function(){
console.log('first module');
};
2.load.jsvar module =require('./module');
module.One();
这样我们就可以在引入了该模块后,返回一个exports对象,这里是指module对象,其实都只是两个引用或者句柄,只是都指向了同一个资源,在load.js里,module的名字可以是任意取的,因为它仅仅是指向require('./module');返回后的一个实例对象的引用,在load.js文件里的module和在module.js里的exports对象是同一个东西.因此上述两个文件可以用一个文件来表示:exports.One = function(){
console.log('first module');
};
exports.One();
其运行结果是一致的,这里我们可以很清晰的看到,我们在使用require('./xxxx')后其实返回的总是在 xxxx.js文件中的exports对象的引用,这个引用的名字我们可以任意取,但是为了规范我们还是最好取符号某些非标准规定(后面说道),但是这样会有不妥的地方,因为它是始终指向exports的实例对象,也就是说,我们虽然有了这个模块,但是这个模块我们只能使用一次,这取决于rquire('./module')只会加在一次该模块.比如我们修改上述代码,
module.js
var name ;
exports.setName = function(oName){
name = oName;
};
exports.getName = function(){
console.log(name);
};
load.jsvar module1 = require('./module');
module1.setName("felayman1");
module1.getName();
var module2 = require('./module');
module2.setName("felayman2");
module2.getName();
module1.getName();
我们可以看到,虽然我们使用了两次require('./module');,但是当我们修改module2后,module1的内容也被修改,这恰恰说明了,module1和module2是指向的同一个对象.有时候这并不影响我们的程序,但是如果我们的module是Person呢?我们希望我们require('./person')后返回的是不同的对象.因此,这种方式是有缺陷的,尽管很方便,这种方式在大部分nodejs的模块中都是很常见,比如fs模块,http模块等.
二.将模块中的函数挂载到exports对象的属性上
person.js
function Person{
var name;
this.setName = function(theName){
name = theName;
};
this.sayHello = function(){
console.log('Hello',name);
};
}
exports.Person = Person;
load.js
var Person = require('./person').Person;
var person1 = new Person();
person1.setName("felayman1");
person1.sayHello();
var person2 = new Person();
person2.setName("felayman2");
person2.sayHello();
person1.sayHello();
这样我们可以看到,我们就可以引入一个函数了,我们把在person.js文件中的Person函数设置为eports对象的一个属性,我们只需要在load.js文件中引入该属性,就可以获取到多个该函数的实例,在nodejs中的EventEmitter就是基于这种方式,但是这样我们总是在使用 require('./person').Person;这样的写法有点太复杂,因此nodejs允许我们使用其他更简洁的方式,利用全局变量--module,这样我们在其他文件中引入其他模块的时候,就更方便了.
三.利用全局变量module
person.js
function Person(){
var name;
this.setName = function(theName){
name = theName;
};
this.sayHello = function(){
console.log('Hello',name);
};
}
// exports.Person = Person;
module.exports = Person;
load.jsvar Person = require('./person');
var person1 = new Person();
person1.setName("felayman1");
person1.sayHello();
var person2 = new Person();
person2.setName("felayman2");
person2.sayHello();
person1.sayHello();
这样一修改,我们就在使用require函数的时候就方便了,如果觉得这里难以理解,我们可以把两个文件里语法放到一起:var Person = require('./person');
module.exports = Person;
这样,我们就可以看出,其实就是这样var Person = Person.
因为上述我们都已经说过,require('./person')其实就是module.exports 对象的,这里的module我们不用太在意,就跟javascript中的window一样,是一个全局变量,即 module.exports =exports就类似于window.alert() =alert()差不多的效果,这样我们就能看出,我们再次使用require('./person')的时候其实就是导入了我们所需要的exports对象的属性函数模板了,这样我们也可以多次实例化我们所需要的对象了.这种方式是综合了前两种的方法,因此也是官方推荐的使用方法.
怎么让nodejs能引用到全局模块
安装模块的时候要加-g确保模块被安装到全局了。
在nodejs文件里面直接require(模块名称)就可以了