modules

模块的简介

Module 是Node.js中最重要的一个部分也是进行深度开发前的必修课。掌握Module才能真正理解NodeJS的精髓,你会发现从思路上会有极大的扩展。  学会写module就相当于学会了在C#内写类和开发类库一般。

一切从require开始

在nodejs中最常使用的就是 require("模块名") 函数了。require就相当于我们在C#中使用的using关键字,模块相当于某一命名空间下的类库。我们可以通过显式引入或隐式引入两种方式使用require, 先看看这两种方式的区别

var express=require("express");
var router=require("./routers/index");

明显地显式引入只需要模块的名称即可,这要求模块文件处于当前运行目录下的node_modules子目录下且模块需要具有package.json的描述文件。而显式引入则可以存在于项目的任何位置,只需要加入引入路径就可以使用。

显式引入适就于重用度高的模块代码,如果是开源代码的话可直接发布到npm上通过npm命令行在其它的项目中安装引入。如果只存于本地,也可以将其copy至node_modules/[模块名]的目录下,然后加入一个package.json的文件

{
"name": "[模块名]",
"description": "模块的描述",
"main": "./[模块的js文件名].js"
},

这样就可以在实现模块的隐式调用。package.json这个文件大有文章,也是发布至npm上的一个重要的描述文件,对于项目发布会有很大的用处,这里是package.json文件详细说明,如有需要的朋友可以进去详细地了解(英文)。

而对于重用度不高的代码就可以通过相对路径的对文件进入引入,这里值得说明一点的就是路径符号的转义:

"./"  -> 指的是当前文件的所在位置

"../" -> 当前文件的父目录

"/" -> 项目根路径

如果当前模板为执行模块,可通过 __dirname 获得当前项目的执行路径的绝对路径。

如何入手

模块的的制编写其实非常简单,新建一个.js文件,在最后通过module.exports导出一个对象实例,或者是一个类型。

例子1:导出实例

var mymodule= {
save:function(){
console.log("Save function call");
},
setOption:function() {
....
}
} module.exports=mymdoule;

调用:

var _m=require("./mymodule");
var _m.save();

这种导出方式直接就是导出mymodule这个实例对象。

例子2:导出类型

var myModule= function() { }

myModule.prototype={
save:function() {
console.log("Save function call");
},
setOption:function() { .... }
} 
module.exports=myMdoule;

调用:

var m=require("./mymodule");
var _m=new m();
_m.save();

通过类型引出的方式可以更好地控制对象的作用域,应采用闭包的方式将变量尽可能地封闭在模块自身的作用域内这样不会引起模块间引用的变量污染问题。

在Browser端运行模块

在很多情况下我们会碰到服务端的业务逻辑处理与客户端的处理是一样的,过往由于客户端运行的是javascript而服务端运行的是其它的服务端语言,那么也不得不将业务逻辑重写一次。而nodejs则改变了这一切,我们可以将服务代码加上一点判断就可以将其放罢到浏览器端运行。

如:我当前有一个时间格式化的方法,需要支持客户端的运行与服务端运行一至只需要在module.exports 上加上一小段判断:

var timeUtilty={
format:function(val) {
return "Date time format "
}
} if (typeof(window)===undefined)
module.exports=timeUtilty;

这样当我们在开发能支持 application offline功能的模块时就省事多了,只需要有一套代码就能在两个端同时处理了, 赞一个!

推荐阅读

NodeJS旅程 : module 不可忽略的重点的更多相关文章

  1. NodeJs 的Module.export 和 export

    NodeJs  的Module.export 和 export 是一样的. 但是Module.export ={....} 可以起效,.export ={....} 是失效的. 这里的export  ...

  2. nodejs 中module.exports 和 exports 区别详细介绍

    你肯定非常熟悉nodejs模块中的exports对象,你可以用它创建你的模块接下来介绍创建过程,感兴趣的朋友可以参考下 你肯定非常熟悉nodejs模块中的exports对象,你可以用它创建你的模块.例 ...

  3. ES6的export与Nodejs的module.exports

    原文:https://www.cnblogs.com/lxg0/p/7774094.html module.exports与exports,export与export default之间的关系和区别 ...

  4. 理解nodejs的module模块儿

    module 在 Node.js 模块系统中,每个文件都视为独立的模块,node在运行某个模块儿时会生成一个module对象 Module { id: '.', exports: 2, parent: ...

  5. nodejs request module里的json参数的一个坑

    今天工作的时候遇到一个坑,在客户端用nodejs给服务器发送HTTP请求,服务器老是报错:In the context of Data Services an unknown internal ser ...

  6. 理解nodejs的module

    module 在 Node.js 模块系统中,每个文件都视为独立的模块,node在运行某个模块儿时会生成一个module对象 Module { id: '.', exports: 2, parent: ...

  7. NodeJs:module.filename、__filename、__dirname、process.cwd()和require.main.filename

    转载于: http://blog.csdn.net/bugknightyyp/article/details/17999473 module.filename:开发期间,该行代码所在的文件. __fi ...

  8. NodeJS旅程 : express - nodejs MVC 中的王牌

    express 正如ASP.NET MVC 在作为.net平台下最佳的 Mvc框架的地位一样,express在 node.js 环境也有着相同的重要性.在百度上 "nodejs expres ...

  9. nodejs addon/module

    https://github.com/nodejs/node-addon-examples https://github.com/nodejs/node-gyp http://skitr.com/20 ...

随机推荐

  1. SQLSERVER中的元数据锁

    SQLSERVER中的元数据锁 网上对于元数据锁的资料真的非常少 元数据锁一般会出现在DDL语句里 下面列出数据库引擎可以锁定的资源 资源 说明 RID 用于锁定堆(heap)中的某一行 KEY 用于 ...

  2. Percona MySQL5.7内存OOM案例导致重启的memory和thread分析

    前言 在一个阳光明媚的下午,电脑右下角传来一片片邮件提醒,同时伴随着微信钉钉的震动,打开一看,应用各种出错,天兔告警,数据库服务器内存爆红,Mysql数据库实例挂掉了. 排查 先交代一下数据库版本: ...

  3. [IDEA_3] IDEA 配置 GitHub 并上传项目

    0. 说明 参考 Git & GitHub 的安装配置 IDEA 配置 GitHub 并上传项目 1. 安装配置 Git & GitHub 参照 Git & GitHub 的安 ...

  4. django模板系统(上)

    filters 过滤 default 替代作用 filesizeformat 格式化为人类可读 add 给变量加参数 lower 小写 upper 大写 title 标题 ljust 左对齐 rjus ...

  5. MySql详解(二)

    MySql的安装和使用安装过程可以自行百度,非常简单,一直下一步就行,这里省略. 启动和停止MySql服务:• 方式一:通过计算机管理方式右击计算机—管理—服务—启动或停止MySQL服务• 方式二:通 ...

  6. Spark项目之电商用户行为分析大数据平台之(六)用户访问session分析模块介绍

    一.对用户访问session进行分析 1.可以根据使用者指定的某些条件,筛选出指定的一些用户(有特定年龄.职业.城市): 2.对这些用户在指定日期范围内发起的session,进行聚合统计,比如,统计出 ...

  7. openresty火焰图安装

    1.下载systemtap安装包并安装 从https://sourceware.org/systemtap/ftp/releases/下载最新版的systemtap.tar.gz压缩包 我安装的时候, ...

  8. VS2010自行编译OpenCV2.4.4时缺少python27_d.lib的解决方法

    错误 24 error LNK1104: 无法打开文件“python27_d.lib”  C:\OpenCV\VS2013_64\modules\python\LINK opencv_python 编 ...

  9. 将如下三组不同类型的数据利用DataInputStream和DataOutputStream写入文件,然后从文件中读出

    三组数据如下: {19.99 , 9.99 , 15.99 , 3.99 , 4.99} {12 , 8 , 13 ,29 ,50} {"Java T-shirt" , " ...

  10. mysql linux 安装卸载

    mysql安装包官网https://dev.mysql.com/downloads/mysql/5.7.html#downloads wget https://dev.mysql.com/get/Do ...