Node.js

简单的说 Node.js 就是运行在服务端的 JavaScript。

  • Node.js 是一个基于Chrome JavaScript 运行时,使用C++编写,建立的一个平台。本质上是JavaScript的运行环境;
  • Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。

优点:

  • 可以解析JS代码(没有浏览器安全级的限制)
  • 提供系统级别的API
    1.文件的读写
    2.进程的管理
    3.网络通信

node.js让JavaScript流畅的运行在服务器端,彻底打破了前后端的语言边界

以下是推荐的四个网站:
  • nodejs.org (官网)
  • nomjs.org
  • github 搜索node关键词
  • stackoverflow.com

安装Node.js

1.nodejs的版本:
偶数位为稳定版本 奇数位为不稳定版本
-0.6.x -0.7.x
-0.8.x -0.9.x
-0.10.x -0.11.x
2.安装
  1.下载并安装git Bash(客户端工具,可以执行git命令。。)
  2.打开nodejs.org(官网),下载并安装node.js
  3.打开命令窗口,输入node -v(判断node是否安装好并查看版本号)
  4.输入npm -v(判断npm是否安装好并查看版本号)
  5.输入node  (进入他的环境,可以做简单的运算方法)

简单小例子:

1.新建server.js文件

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello Node.js\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

2.在命令行输入node server.js

3.在浏览器中输入127.0.0.1:3000

4.在命令行中使用快捷键Ctrl+C可停止之前的服务

Node.js防止变量污染,模块互不影响

约定了JavaScript怎么去组织编写


规范与实现的互为促进

模块与包管理工具

js的天生缺陷——缺少模块化管理机制
表现>> JS中容易出现变量被覆盖,方法被替代的情况(既被污染)。特别是存在依赖关系时,容易出现错误。这是因为JS缺少模块管理机制,来隔离实现各种不同功能的JS判断,避免它们相互污染。
解决>> 经常采用命名空间的方式,把变量和函数限制在某个特定的作用域内,人肉约定一套命名规范来限制代码,保证代码安全运行。jQuery中有许多变量和方法,但是无法直接访问,必须通过jQuery,$调用 各个方法。

Commonjs规范- [ ]

不同于jQuery,Commonjs是一套规范,约定了js如何组织,如何编写,包括包,二进制,套接字,单元测试等等。大部分标准在拟定和讨论之中,首先把执行不同任务的代码块和代码文件看为独立的模块,每一个模块都是一个单独的作用域,但不是孤立的,可能存在依赖关系。每个模块分为三个部分,定义、标识和引用。这套规范与现实产品如node.js相互影响,良性循环。

NodeJs的模块管理机制

node.js借鉴了commonjs的这种理念,并基于Commonjs,实现了一套模块管理系统,node中每一个js文件都是一个独立的模块,在其内部不需要有命名空间,不需要担心变量的污染和方法定义时的隔离。同时模块之间可以组合形成更强大的模块或功能包。npm即是用来管理各种功能包的。

nodejs模块分类:

在nodejs中可以通过文件路径或文件名来引入模块,如果用名称引用非核心模块的话,node最终会把模块映射到对应的模块文件的路径,那些包含了核心函数的核心模块会在node启动时被预先加载。非核心模块包括使用npm安装的第三方模块或自己创建的本地模块。

模块分类.png

模块的流程

  1.创建模块 => 入口js文件,加入特定的功能
  2.导出模块 => 把功能和文件名也就是模块名建立关系
  3.加载模块 => 在其他文件里面引入并加载这个模块
  4.使用模块 => 直接调用模块中命名好的方法
模块的流程.png

以下是一个简单的例子:

1.新建student.js文件

function add(student){
    console.log("Add Student:"+student);
}

exports.add = add;

2.新建teacher.js文件

function add(teacher){
    console.log("Add Teacher:"+teacher);
}

exports.add = add;

3.新建klass.js文件

var student = require('./student');
var teacher = require('./teacher');

// teacher.add('Wangxiaoming');

function add(teacherName,students){
    teacher.add(teacherName);

    students.forEach(function(item,index){
        student.add(item);
    })
}

exports.add = add;

// module.exports = add;

3.新建index.js文件

var klass = require('./klass');

klass.add('ZYT',['高富帅','白富美']);

// exports.add = function(kclasses){
//  kclasses.forEach(function(item,index)){
//      var _kclass = item;
//      var teacherName = item.teacherName;
//      var students = item.students;

//      kclass.add(teacherName,students);
//  }
// }

4.在命令行中输入node index

nodejs中exports与module.exports的区别

http://www.cnblogs.com/pigtail/archive/2013/01/14/2859555.html

其实,Module.exports才是真正的接口,exports只不过是它的一个辅助工具。 最终返回给调用的是Module.exports而不是exports。

所有的exports收集到的属性和方法,都赋值给了Module.exports。当然,这有个前提,就是Module.exports本身不具备任何属性和方法。
如果你想你的模块是一个特定的类型就用Module.exports。如果你想的模块是一个典型的“实例化对象”就用exports。
前面已经提到module.exports是真正的接口,exports只不过是它的辅助工具。推荐使用exports导出,除非你打算从原来的“实例化对象”改变成一个类型。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容