Node.js笔记2
入门二
5. 事件
Node.js中所有的异步I/O操作完成时都会发送一个事件到事件队列。
Events 事件模块 `events.EventEmitter`
简单用法:
var EventEmitter = require('events').EventEmitter;
var event = new EventEmitter();
event.on('some_event', function() {
console.log('some_event occured.');
});
setTimeout(function() {
event.emit('some_event');
}, 1000);
**Node.js 的事件循环机制**
Node.js 程序由事件循环开始,到事件循环结束,所有的逻辑都是事件的回调函数,所以 Node.js 始终在事件循环中,程序入口就是事件循环第一个事件的回调函数。事件的回调函数在执行的过程中,可能会发出 I/O 请求或直接发射(emit)事件,执行完毕后再返回事件循环,事件循环会检查事件队列中有没有未处理的事件,直到程序结束。
6. 模块和包
1. Node.js提供了`require`来调用模块 Node.js 的模块和包机制的实现参照了 CommonJS 的标准
1.创建模块
通过`exprots`可以你写的方法作为模块的访问接口
其他文件调用方式是`require('./module')`
var name;
exports.setName = function(thyName) {
name = thyName;
};
exports.sayHello = function() {
console.log('Hello ' + name);
};
2.覆盖 exports
function Hello() {
var name;
this.setName = function(thyName) {
name = thyName;
};
this.sayHello = function() {
console.log('Hello ' + name);
};
};
module.exports = Hello;
这个地方将exports覆盖。可以在其它文件中直接调用了。
var Hello = require('./hello');
hello = new Hello();
hello.setName('test');
hello.sayHello();
2. 创建包
Node.js 的包是一个目录,其中包含一个 JSON 格式的包说明文件 package.json。
严格符合 CommonJS 规范的包应该具备以下特征:
1. package.json 必须在包的顶层目录下;
2. 二进制文件应该在 bin 目录下;
3. JavaScript 代码应该在 lib 目录下;
4. 文档应该在 doc 目录下;
5. 单元测试应该在 test 目录下。
**Node.js 在调用某个包时,会首先检查包中 package.json 文件的main 字段,将其作为包的接口模块,如果 package.json 或main字段不存在,会尝试寻找 index.js 或index.node作为包的接口。**
**package.json 规范细节**
1. name:包的名称,必须是唯一的,由小写英文字母、数字和下划线组成,不能包含空格。
2. description:包的简要说明
3. version:符合语义化版本识别①规范的版本字符串。
4. keywords:关键字数组,通常用于搜索。
5. maintainers:维护者数组,每个元素要包含name、email(可选)、web(可选)字段
6. contributors:贡献者数组,格式与maintainers相同。包的作者应该是贡献者数组的第一个元素。
7. bugs:提交bug的地址,可以是网址或者电子邮件地址。
8. licenses:许可证数组,每个元素要包含type(许可证的名称)和 url(链接到许可证文本的地址)字段
9. repositories:仓库托管地址数组,每个元素要包含type(仓库的类型,如git)、url(仓库的地址)和path(相对于仓库的路径,可选)字段。
10. dependencies:包的依赖,一个关联数组,由包名称和版本号组成
3. 包管理器
包安装到当前目录
`npm [install/i] [package_name]`
全局安装模块
`npm [install/i] -g [package_name]`
**总而言之,当我们要把某个包作为工程运行时的一部分时,通过本地模式获取,如果要在命令行下使用,则使用全局模式安装。**
`npm link` 创建全局链接 帮助你使用全局安装的模块 可以把全局包当本地包来使用了 *不支持window
`npm init` 可以根据交互式问答产生一个符合标准的 package.json
`npm adduser`创建一个用于发布npm的账户
`npm whoami`用于检测是否创建成功
7. 调试
node debug app.js 将会启动调试工具
远程调试
node --debug[=port] script.js
node --debug-brk[=port] script.js
安装node-inspector 调试
npm install -g node-inspector
node --debug-brk=5858 debug.js //运行debug.js
node-inspector //开启inspector调试
http://127.0.0.1:8080/debug?port=5858 //浏览器打开
Node.js笔记2的更多相关文章
- Node.js笔记1
Node.js入门笔记 1. node -help 可以显示帮助信息2. node REPL 模式(Read-eval-print loop) 输入—求值—输出循环 直接在cmd输入node 可以进入 ...
- node.js 笔记
教程总结笔记: 学习网站:http://www.runoob.com/nodejs/nodejs-install-setup.html Node.js 中文网及安装文件下载: http://nodej ...
- Node.js 笔记02
一.关于命令 常用命令: dir 列出当前目录下面所有的文件 cd 目录名 进入到指定的目录,. 当前目录, .. 进入上级目录,cd . 当前目录, cd .. 上级目录 md 目录名 创建文件夹 ...
- node.js 笔记(一)
参考:https://github.com/alsotang/node-lessons 感谢!!! 本文属于小白入门级笔记,请大牛自动屏蔽!!! 1. 开发环境 os: 10.12.6 nod ...
- 学习Node.js笔记(一)
一.什么是Node.js 1.1.Node.js是什么 Node.js是用来编写高性能网络服务器的JavaScript工具包 Node.js 是一个基于Chrome JavaScript 运行时建立的 ...
- node.js笔记
在node环境上面运行js代码,js相当于php,node相当于apache环境 第一步装 node 环境1.从官网下载 dmg 文件安装2.通过命令行安装 需要用到 homebrew(mac上专门用 ...
- Node.js笔记4
4. 文件系统 fs fs模块是文件操作的封装,提供了同步跟异步操作2个版本 * fs.readFile(filename,[encoding],[callback(err,data)]) 是最简单的 ...
- Node.js笔记3
###Node.js核心模块 1. 全局对象 Node.js中能够访问到的都是global的属性 **process它用于描述当前 Node.js 进程状态的对象,提供了一个与操作系统的简单接口.** ...
- node.js 笔记一
现在地址:http://nodejs.org/download/ 我的机器是windows的,选择的文件是,是编译后的版本:Windows Installer (.msi) 32-bit examp ...
随机推荐
- 走进C标准库(4)——"stdio.h"中的putc
花了点时间把园子弄得好看了点,现在继续. 函数名: putc 功 能: 输出一字符到指定流中 用 法: int putc(int ch, FILE *stream); #define _putc_ ...
- 一个由proguard与fastJson引起的血案
更多内容在这里查看 https://ahangchen.gitbooks.io/windy-afternoon/content/ 更新微信sdk导致ComposeData中的内部类ComposeDat ...
- U盘安装XP SP3 professional手记
因为专业应用的软件无法在win7上运行,但在XP上是可以正常使用,所以有想法并有必要重装一下. 说句实在话,之前用U盘安装Windows7真的没有这么麻烦,没想到相同的技术用于安装XP 却是如此折腾人 ...
- java中输出流OutputStream 类应用实例(转)
OutputStream类该类是字节输出流的抽象类,定义了输出流的各种操作方法.这些方法的说明如表1所示.下面通过实例介绍如何使用OutputStream类向控制台输出字符串信息.步骤如下.(1)创建 ...
- 如何自定义Intent.createChooser的显示结果
Intent是android核心的概念之一,Intent为android系统提供了真正的开放.android的姿态是开放了,但却没有做到位. 拿“发邮件”这一功能来说,为了使用Intent机制来发送邮 ...
- Codeforces 263E
Codeforces 263E 原题 题目描述:一个\(n \times m\)的矩阵,每格有一个数,给出一个整数\(k\),定义函数\(f(x, y)\): \[f(x, y)=\sum_{i=1} ...
- Quality Over Quantity: 更少一些,更好一些_第1页_福布斯中文网
Quality Over Quantity: 更少一些,更好一些_第1页_福布斯中文网 Quality Over Quantity: 更少一些,更好一些 2013年04月09日 ...
- python代码的书写要求
刚刚接触python,python是对缩进要求很严格的语言,对于我这种平时tab,空格乱用的菜鸟来说简直是吃劲苦头阿,经常出现IndentationError.在这里我就结合自己的经历说说书写格式,如 ...
- POJ 2342 树形DP入门题
有一个大学的庆典晚会,想邀请一些在大学任职的人来參加,每一个人有自己的搞笑值,可是如今遇到一个问题就是假设两个人之间有直接的上下级关系,那么他们中仅仅能有一个来參加,求请来一部分人之后,搞笑值的最大是 ...
- c# 针对不同数据库进行参数化查询
使用参数化 DbCommand 的一个缺点是需要参数的代码将仅适用于支持相同语法的提供程序.OLEDB.SqlClient 和 Oracle 提供程序全部使用不同的语法.例如,用于命名和指定参数的 S ...