nodejs教程之入门


Posted in NodeJs onNovember 21, 2014

前言

再不学nodeJs,我们就老了......在HTML5大浪袭来的时候,很多先辈就开始了NodeJs之旅,而那时我还在做服务器端的程序
后来转成前端,和梯队的距离已经很大了,因为我会服务器端语言,还干了很久,所以至今才开始学习NodeJs,向完整的前端前进
这次学习NodeJs的计划是:
① 1-2周学习基础知识
② 1周左右开发一个简单项目
③ 利用NodeJs开发一套用于移动端调试的工具
④ 打包相关(这个可能比较远了)

NodeJs特点

① 异步
从文件读取到网络请求,NodeJs皆以异步完成,回调函数占据重要作用,在编程模型上Node是领先的

② 事件回调
事件回调让程序变得轻巧,但是具体怎么样还是取决于程序员。但是回调函数在阅读上其实还是有一定难度的

③ 单线程
Node是单线程的,如果多线程的话,这门语言水又深了,问几句进程中的通信时很讨厌的,但线程也没有死锁等问题
但是性能相关就有问题了,因为不能利用多核;

模块机制/CommonJs

我们原来做服务器端的开发,如果没有很好的组织代码的话,后期维护非常困难,所以才会有什么MVC,什么三层架构
而现在前端的业务逻辑逐向后端靠拢,就单页应用来说,已经超过后端的程序逻辑
页面view不停的增加会带来js代码量的激增,如何很好的管理我们的前端代码成了一个问题,所以requireJs出现了......
PS:尼玛这段和nodeJs有一毛钱关系哇......
javascript是没有模块化系统的,于是就有CommonJs的提出,让js具备开发大型应用的基础

模块引用

我们如果要引用一个模块,比如数学计算相关:

var math = require('math');

模块定义

我们如果要定义自己的模块可以这样干

exports.add = function () {

  return sum;

}

如果此函数在math中定义的话,就能使用了

math.add();

模块标识

模块标识就是传递给require的参数,需要为驼峰命名,指向的是一个文件路径,这里和requireJS很类似的

模块实现

Node中模块实现分为两类,一种是系统级别的核心模块,一种是用户编写的文件模块
核心模块在编译过程被翻译成了二进制文件,Node进程启动后,一些核心的模块会直接加载进内存(文件定位、编译执行)
文件模块需要动态加载,速度相对慢一点
但是一旦加载后,那些文件便会被缓存,二次引入时候便会读取缓存文件(编译后的文件)
这里扯远一点,我们在使用underscore过程中,会编译Html形成模板函数(他真的只是一个函数),其实这个就可以做缓存
在部署项目之前保存编译过后的函数,去掉html模板文件(优化效果不知)

在node中,每个模块都是一个对象:

function Module(id, parent) {

  this.id = id;

  this.exports = {};

  //parent是关键字,不应该乱用

  this.parent = parent;

  if (parent && parent.children) {

    parent.children.push(this);

  }

  this.filename = null;

  this.loaded = false;

  this.children = [];

}

编译和执行时引入文件模块的最后一个阶段,定位到具体文件后,node会新建一个模块对象,然后根据路径载入并编译
每一个编译成功的模块都会将其文件路径作为索引缓存在Module._cache上

每个模块文件都存在require、exports、module三个变量,但是在文件中并未定义(__filename__、__dirname__ 变量也是)
其实在编译过程中,Node对javascript文件内容进行了头尾包装(相当于自定义函数传入window)

(function (exports, require, module, __filename__, __dirname__) { 

  var math = require('math');

  exports.area = function (radius) {

    return '';

  };

});

这样,模块与模块之间做了隔离,不会互相影响,这里和underscore的编译有些类似......

包与NPM

Node组织了自身的核心模块,所以第三方文件模块可以有序的编写和使用,但是在第三方模块中,模块与模块之间仍然散列在各地
相互之间不能直接引用,在模块外包和NPM则是将联系建立起来的一种机制
PS:很多模块会形成一个包,这个包的概念和java包的概念,才#程序集的概念应该相似

一个包结构解压后会形成几个文件:
① package.json 描述文件
② bin 可执行二进制目录
③ lib javascript代码目录
④ doc 文档(尼玛基本没有)
⑤ test demo

以上都是CommonJS包的规范的一些东西,但是我们稍微了解一下便可(初学嘛),NPM则需要熟练掌握,借助NPM我们可以熟练安装管理包

安装依赖包

安装依赖包是常用方法:

npm install express
执行后就会在当前目录下创建node_modules目录,然后再其下面创建express目录......
PS:express是NodeJs上流行的web开发框架,帮助我们快速开发一个web应用
安装结束后就可调用了:

var express = require('express');

结语

这段简单结束,后面我们项目实战过程逐步深化

NodeJs 相关文章推荐
PHPStorm 2020.1 调试 Nodejs的多种方法详解
Sep 17 NodeJs
利用NodeJS的子进程(child_process)调用系统命令的方法分享
Jun 05 NodeJs
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
Sep 26 NodeJs
Express与NodeJs创建服务器的两种方法
Feb 06 NodeJs
nodejs制作爬虫实现批量下载图片
May 19 NodeJs
详解nodeJS之路径PATH模块
May 31 NodeJs
nodeJS实现简单网页爬虫功能的实例(分享)
Jun 08 NodeJs
nodejs前端自动化构建环境的搭建
Jul 26 NodeJs
nodejs express配置自签名https服务器的方法
May 22 NodeJs
基于Nodejs的Tcp封包和解包的理解
Sep 19 NodeJs
windows如何把已安装的nodejs高版本降级为低版本(图文教程)
Dec 14 NodeJs
分享五个Node.js开发的优秀实践 
Apr 07 NodeJs
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
Nov 20 #NodeJs
nodejs开发环境配置与使用
Nov 17 #NodeJs
Nodejs全栈框架StrongLoop推荐
Nov 09 #NodeJs
初始Nodejs
Nov 08 #NodeJs
Nodejs极简入门教程(三):进程
Oct 27 #NodeJs
Nodejs极简入门教程(二):定时器
Oct 25 #NodeJs
Nodejs极简入门教程(一):模块机制
Oct 25 #NodeJs
You might like
解析PHP计算页面执行时间的实现代码
2013/06/18 PHP
PHP面向对象程序设计之类常量用法实例
2014/08/20 PHP
jQuery向下滚动即时加载内容实现的瀑布流效果
2016/01/07 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
2019/04/10 PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
2019/10/24 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
2021/03/09 PHP
一个可拖拽列宽表格实例演示
2012/11/26 Javascript
禁用JavaScript控制台调试的方法
2014/03/07 Javascript
jQuery插件Zclip实现完美兼容个浏览器点击复制内容到剪贴板
2015/04/30 Javascript
介绍JavaScript中Math.abs()方法的使用
2015/06/14 Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
2016/03/13 Javascript
关于webuploader插件使用过程遇到的小问题
2016/11/07 Javascript
vue 自定义全局方法,在组件里面的使用介绍
2018/02/28 Javascript
layUI的验证码功能及校验实例
2019/10/25 Javascript
使用Eclipse如何开发python脚本
2018/04/11 Python
一个简单的python爬虫程序 爬取豆瓣热度Top100以内的电影信息
2018/04/17 Python
在pycharm中设置显示行数的方法
2019/01/16 Python
解决Pandas的DataFrame输出截断和省略的问题
2019/02/08 Python
Python中psutil的介绍与用法
2019/05/02 Python
Python多线程threading模块用法实例分析
2019/05/22 Python
python对一个数向上取整的实例方法
2020/06/18 Python
介绍CSS3使用技巧5个
2009/04/02 HTML / CSS
伦敦一卡通:The London Pass
2018/11/30 全球购物
CHARLES & KEITH台湾官网:新加坡时尚品牌
2019/07/30 全球购物
网络技术支持面试题
2013/04/22 面试题
J2EE系统只能是基于web
2015/09/08 面试题
精彩的推荐信范文
2013/11/26 职场文书
总经理司机岗位职责
2014/02/06 职场文书
区长工作作风个人整改措施
2014/10/01 职场文书
公证书格式
2015/01/23 职场文书
2015年度质量工作总结报告
2015/04/27 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
党校培训学习心得体会
2016/01/06 职场文书
2019通用版劳动合同范本!
2019/07/11 职场文书