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. Appium环境搭建python篇(mac系统)

    1.安装Appium 通过终端安装: 安装nodejs,下载地址:https://nodejs.org/download/,安装完成后打开终端输入node -v,检查是否安装成功 安装npm,打开终端 ...

  2. 用 Windows Live Writer 写blog,This is Test……..

    1.下载  Windows Live Writer,百度一下下载地址,不在这里提供下载了. 2.选择安装,其它微软应用不需要就不要安装. 3.里面有很多用的插件很好玩的,点击添加插件.

  3. Freemarket语法

    <#--freemarker HashMap取值--> <#assign maps={"1":"张三丰","2":&quo ...

  4. Android分区

    1. Android 分区: 2. Android各个分区的作用: 2.1 modem分区 实现手机必需的通信功能,大家通常所的刷RADIO就是刷写modem分区,在所有适配的ROM中这部分是不动,否 ...

  5. Collection中的List,Set的toString()方法

    代码:     Collection c = new ArrayList();     c.add("hello");     c.add("world"); ...

  6. laravel 实现思路以及各组件原理

    laravel 内核是个IOC容器,IOC是把本来自己实例化的对象. 通过在容器里注册,通过容器来进行实例化. laravel队列用的是redis的列表来实现.

  7. sql语句查询月份的数据

    在实际项目中,经常需要按月查询数据,在这里把我用到的sql整理一下,以便日后查看. 例如,查询当月的数据 ),addtime,)),) 查询结果: 查询上月的数据,需要用另一个sql函数,datead ...

  8. Sqlite的安装和简单使用

    Sqlite 1 安装 首先,下载相应的版本: https://sqlite.org/download.html 其次,解压到本地,并添加到环境变量. 然后,打开 CMD 创建,输入 sqlite3 ...

  9. swift是强类型语言

    swift是强类型语言 所有的变量必须先声明,后使用: 指定类型的变量只能接收类型与之匹配的值. 强类型:变量的类型明确,变量的赋值必须符合类型约束:变量的类型转化必须显式进行. 强类型:类型规则的制 ...

  10. Netty入门(八)构建Netty HTTP/HTTPS应用

    HTTP/HTTPS 是最常见的一种协议,这节主要是看一下 Netty 提供的 ChannelHaandler. 一.HTTP Decoder,Encoder 和 Codec HTTP 是请求-响应模 ...