1. NodeJs的事件模型被称为非阻塞式IO或者事件驱动IO

2. Node.js 几乎每一个 API 都是支持回调函数的。

3. Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。

4. Node.js 是单进程单线程应用程序,但是因为 V8 引擎提供的异步执行回调接口,通过这些接口可以处理大量的并发,所以性能非常高。

5. 在事件驱动模型中,会生成一个主循环来监听事件,当检测到事件时触发回调函数。

6.

JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。

但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。

每当需要在 Node.js 中处理I/O操作中移动的数据时,就有可能使用 Buffer 库。原始数据存储在 Buffer 类的实例中。一个 Buffer 类似于一个整数数组,但它对应于 V8 堆内存之外的一块原始内存。

7. 一个NodeJS文件就是一个模块。

8. NodeJS提供了exports和require两个对象。

9.

有时候我们只是想把一个对象封装到模块中,格式如下:

module.exports = function() {
// ...
}

例如:

//hello.js
function Hello() {
    var name;
    this.setName = function(thyName) {
        name = thyName;
    };
    this.sayHello = function() {
        console.log('Hello ' + name);
    };
};
module.exports = Hello;

这样就可以直接获得这个对象了:

//main.js
var Hello = require('./hello');
hello = new Hello();
hello.setName('BYVoid');
hello.sayHello(); 10. 

由于 Node.js 中存在 4 类模块(原生模块和3种文件模块),尽管 require 方法极其简单,但是内部的加载却是十分复杂的,其加载优先级也各自不同。如下图所示:

11. 在浏览器 JavaScript 中,通常 window 是全局对象, 而 Node.js 中的全局对象是 global。

12. 常见的客户端存储有几种:第一种,Web存储,其中包含localStorage对象和sessionStorage对象;第二种,Cookie,其作为一种被服务端脚本使用的客户端存储机制。

13. NodeJS虽然是单线程的,但是这里的单线程仅仅是JavaScript执行在单线程中罢了,其内部完成I/O任务的是线程池。

14. 异步I/O的实现主要包含两个阶段:提交请求和处理结果。这两个阶段中间有事件循环的调度,两者彼此不关联。

15. NodeJS在处理异常上形成了一种约定,将异常做为回调函数的第一个实参传回,如果为空值,则表明异步调用没有异常抛出。

async(function (err, results) {
// TODO
});

16. 异步编程的难点:

  • 异常处理
  • 函数嵌套过深
  • 阻塞代码
  • 多线程编程,child_process是其基础API,cluster模块是更深层次的应用。借助Web Workers的模式,开发人员要更多的去面临跨线程的编程。
  • 异步转同步

17. 异步编程的主要解决方案有如下3种:

  • 事件发布/订阅模式
  • Promise/Defered模式
  • 流程控制库

18. mocha默认的模式是Behavior Driven Develop (BDD),要想执行TDD的test的时候需要加上参数,如:

mocha -u tdd test.js

  对于TDD,我们用suite, test, setup, teardown。

对于BDD,我们用describe, it, before, after

  

NodeJS 学习笔记的更多相关文章

  1. Nodejs学习笔记(四)——支持Mongodb

    前言:回顾前面零零碎碎写的三篇挂着Nodejs学习笔记的文章,着实有点名不副实,当然,这篇可能还是要继续走着离主线越走越远的路子,从简短的介绍什么是Nodejs,到如何寻找一个可以调试的Nodejs ...

  2. Nodejs学习笔记(三)——一张图看懂Nodejs建站

    前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广. 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇<Nodejs学习笔记(二)——Eclipse中运行调试 ...

  3. Nodejs学习笔记(二)——Eclipse中运行调试Nodejs

    前篇<Nodejs学习笔记(一)——初识Nodejs>主要介绍了在搭建node环境过程中遇到的小问题以及搭建Eclipse开发Node环境的前提步骤.本篇主要介绍如何在Eclipse中运行 ...

  4. NodeJS学习笔记之Connect中间件模块(一)

    NodeJS学习笔记之Connect中间件模块(一) http://www.jb51.net/article/60430.htm NodeJS学习笔记之Connect中间件模块(二) http://w ...

  5. Nodejs学习笔记(六)--- Node.js + Express 构建网站预备知识

    目录 前言 新建express项目并自定义路由规则 如何提取页面中的公共部分? 如何提交表单并接收参数? GET 方式 POST 方式 如何字符串加密? 如何使用session? 如何使用cookie ...

  6. Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...

  7. Nodejs学习笔记(十六)--- Pomelo介绍&入门

    目录 前言&介绍 安装Pomelo 创建项目并启动 创建项目 项目结构说明 启动 测试连接 聊天服务器 新建gate和chat服务器 配置master.json 配置servers.json ...

  8. [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...

  9. Nodejs学习笔记(十六)—Pomelo介绍&入门

    前言&介绍 Pomelo:一个快速.可扩展.Node.js分布式游戏服务器框架 从三四年前接触Node.js开始就接触到了Pomelo,从Pomelo最初的版本到现在,总的来说网易出品还算不错 ...

  10. Nodejs学习笔记(十五)—Node.js + Koa2 构建网站简单示例

    前言 前面一有写到一篇Node.js+Express构建网站简单示例:http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp.html 这篇还 ...

随机推荐

  1. ts文件分析(纯c解析代码)

    参考链接: 1. MPEG-2 TS码流分析 https://blog.csdn.net/zhubin215130/article/details/8958567 TS Header PAT PMT ...

  2. java 构造方法详解

    构造方法(构造器)    是一种特殊的方法,该方法只有功能:构造对象    特点:        1.没有返回值        2.构造方法的名称一定和类名一致        3.不能在构造方法中写r ...

  3. elasticsearch(2) 数据操作——查询

    一 文档 ES面向文档,并且使用JSON作为文档序列化格式,对于ES来说,文档特指根对象序列化成的JSON数据,以唯一ID标识并存储于ES中. 文档元数据 三个必须的元数据节点 1._index   ...

  4. Protege4.3 添加Rules 栏

    SWRL rules can be edited in Protégé 4, but not with a nice interface like in Protégé 3. If you go to ...

  5. Number and String in JS

    Number 整数 小数(浮点数) 小数参与运算 NaN 其他数据类型转换成数字 String 其他数据类型转换成字符串 Number.Boolean.String的相同点     Number 虽然 ...

  6. javascript 字符串处理

    ---恢复内容开始--- 最近几次参加前端实习生招聘的笔试,发现很多笔试题都会考到字符串的处理,比方说去哪儿网笔试题.淘宝的笔试题等.如果你经常参加笔试或者也是一个过来人,相信你也跟我一样,发现字符串 ...

  7. mac 内置PHP配置多站点

    1.修改/private/etc/hosts 文件,建议用编辑器打开 最后一行加入你的网站名称(自定义),参考如下: 127.0.0.1 www.MyObj.com   2.修改/private/et ...

  8. Holer实现手机APP应用外网访问本地WEB应用

    手机APP应用公网访问内网WEB应用 本地安装了WEB服务端,手机APP应用只能在局域网内访问本地WEB,怎样使手机APP应用从公网也能访问本地WEB? 本文将介绍使用holer实现的具体步骤. 1. ...

  9. Sharepoint 2016 配置FBA(四)添加用户到Membership数据库

    现在还不能用FBA登录,因为数据库还没有用户. 有一些方法来管理membership数据库,有可以用IIS来管理.推荐使用 SharePoint 2016 FBA Pack(https://share ...

  10. React相关:npm,ES6,

    1.NPM: 参考:npm使用入门  npm 学习笔记整理 2.ES6参考:ES6 let命令:ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块 ...