背景:因为appium是基于Node.js的,所以想看一下Node.js。但是发现很多资料的顺序看起来有点颠倒。然后就一面看资料一面整理了一下大概的知识点框架,希望对自己对别人有用。
本文不包含node.js的基本语法。node.js的基本语法和JavaScript基本一样,可以以后再单独整理一份基本语法的。
 
Node.js是一个基于chrome V8的JavaScript运行时的环境
Node.js是事件驱动,非阻塞式I/O模型
Node.js使用npm包管理器
使用Node.js不仅实现了一个应用,也实现了整个HTTP服务器,所以不需要单独搭建Apache或nginx
 
 
Node.js安装
mac下安装方法
brew install node
 
查看node.js的版本
node -v
 
查看包管理工具npm版本
npm -v
 
进入node.js的交互式解释器
node
交互式解释器和python的类似。可以输入命令实时查看输入结果
 
npm的使用
npm随着node一起被安装
npm允许用户从NPM服务器下载并安装第三方包,也允许将自己编写的包上传到第三方服务器,类似python的pip
 
npm安装命令
npm install 【包名】
安装的包放在工程目录的node_modeles目录下,例如mac上是在/usr/local/lib/node_modules文件夹下
安装好的包在代码中通过require("包名")来引用
 
安装的包模块的目录下有package.json,文件包含了包名、依赖包列表(npm安装时会将依赖表中的包自动安装)
 

Package.json 属性说明

  • name - 包名。

  • version - 包的版本号。

  • description - 包的描述。

  • homepage - 包的官网 url 。

  • author - 包的作者姓名。

  • contributors - 包的其他贡献者姓名。

  • dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。

  • repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。

  • main - main 字段是一个模块ID,它是一个指向你程序的主要项目。就是说,如果你包的名字叫 express,然后用户安装它,然后require("express")。

  • keywords - 关键字
(属性转自菜鸟教程)
 
npm卸载命令
npm uninstall 【包名】
 
更新模块
npm update 【包名】
 
搜索模块
npm search【包名】
(从包管理中心搜索包含该关键词的包)
 
更改npm下载的地址为国内的仓库
有些包下载较慢,可以切换到国内的仓库
npm config list(查看npm的一些配置项)
npm config set registry cnpmjs.org(更改仓库为cnpmjs.org)
 
首次更改仓库后,会创建一个~/.npmrc文件,里面内容为“registry="https://registry.npm.taobao.org "”
如果想切回到原来的下载中心,可以将~/.npmrc中的registry注释掉或删掉。
 
Node.js引入其他模块
通过require()引入其他模块
引入npm下载的第三方模块
require("模块名")
 
引入本地某一路径下的模块(实际就是.js文件,引用时不需要后缀)
require("路径/模块名")
例如引入当前目录的hello.js模块:require("./hello")
 
Node.js的函数
Node.js中一个函数可以作为另一个函数接收参数,通过关键字function定义函数
定义方式:function 函数名(参数){要执行的内容}
 
function say(word){console.log(word)} \\定义一个名字为say的函数,参数为word
say("hi") \\调用函数say,并传递参数word为hi
 
在函数做为参数传递时,也可以定义一个匿名函数(不取函数名,直接function(参数){要执行的内容})直接传递给函数
function exe(name,value){name(value)} \\定义一个函数exe
exe(function(value){console.log(value)},"wow,see it!")  \\执行exe()时,传递的第一个参数是一个匿名函数
 
Node.js的事件
Node.js是单进程单线程应用程序,通过事件和回调来支持并发(Node.js所有的API都通过回调实现了异步)
Node.js中所有事件都是用观察者模式实现的
Node.js中大部分的模块都继承自Event模块(Event模块是一个简单的事件监听器模式的实现)
 
Node.js可以通过引入events模块,并通过实例化EventEmitter类来绑定和监听事件。
绑定事件及事件的处理函数:eventEmitter.on("事件名字",函数)   \\实际就是绑定给时间eventEmitter一个监听器
触发事件:eventEmitter.emit(“事件名字”)
 
例子如下:
var events=require("events")//导入events模块
var eventemitter=new events.EventEmitter()//实例化events的EventEmitter类
eventemitter.on("start",function(){console.log("hello world")})//注册一个事件,绑定打印hello world的事件,名字为start,实际start就是一个监听器
eventemitter.emit("start")//触发事件start
 
实际上on调用的是addListener(event,listener)。一个事件可以on多个监听器,emit执行时依次执行。
可以通过removerListener来移除一个监听器,监听器还有很多其他的方法。
类方法
 
Node.js的回调函数
Node的所有API都支持回调函数(也可以选择不使用回调函数),Node.js的异步是通过回调来实现的,非阻塞的I/O,大大提高了Node.js的性能
阻塞是按顺序执行的,必须执行完当前的代码才会进行下一个执行。而非阻塞是不需要按照顺序的,所以如果需要处理回调函数的参数,就需要写在回调函数内。
 
例如fs的读取函数readFile:
var fs=require("fs")
fs.readFile("test.txt",function(err,data){
     if (err) return console.log(err)
     console.log(data.toString())
})
 
Node的API回调函数的第一个参数都是捕获错误,第二个参数一般是正确的返回值
 
Node.js全局对象
全局对象:它及它的所有属性可以在程序的任何地方访问,不需要require导入
process:与当前进程互动,可以查看当前目录、进程等
console:用于输出
setTimeout :定时,用法【setTimeout(函数,毫秒单位的时间)】
 
还有很多其他的全局对象
 
 
Node.js的工具模块
Node.js模块库有很多很好用的模块,下面列举几个
os:返回当前系统的一些数据
path:对路径做的一些操作
http:可以创建web服务器对象等
fs:针对文件进行读写等操作
 
 
 

Node.js的知识点框架整理的更多相关文章

  1. node.js学习的资源整理

    node中文社区 Node.js专业中文社区:https://cnodejs.org/ node文档 node.js 中文api :http://nodeapi.ucdok.com/ node.js入 ...

  2. node.js Web应用框架Express.js(一)

    什么是Express.js Express 是一个简洁而灵活的 node.js Web应用框架, 提供一系列强大特性帮助你创建各种Web应用,提供丰富的HTTP工具以及来自Connect框架的中间件随 ...

  3. 转 10 个最佳的 Node.js 的 MVC 框架

    10 个最佳的 Node.js 的 MVC 框架 oschina 发布于: 2014年02月24日 (33评) 分享到:    收藏 +322 Node.js 是一个基于Chrome JavaScri ...

  4. Hexo - 快速,轻量,强大的 Node.js 博客框架

    Hexo 是一个快速,轻量,强大的 Node.js 博客框架.带给你难以置信的编译速度,瞬间生成静态文件:支持 Markdown,甚至可以在 Hexo 中集合 Octopress 插件:只需要一个命令 ...

  5. node.js使用express框架进行文件上传

    关于node.js使用express框架进行文件上传,主要来自于最近对Settings-Sync插件做的研究.目前的研究算是取得的比较好的进展.Settings-Sync中通过快捷键上传文件,其实主要 ...

  6. node.js之express框架

    之前学习过node.js接触过express框架,最近为了编写一个mock server正好用到了express.下面正好就跟大家介绍一下关于express.今天的内容主要围绕这么几个方面? expr ...

  7. node.js中的框架

    node.js中的框架 载自: http://nodeframework.com/ MVC frameworks Sinatra-like These frameworks offer rich co ...

  8. koa : Express出品的下一代基于Node.js的web框架

    https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001434501579966a ...

  9. 【node.js】Express 框架

    Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具. 使用 Express 可以快速地搭建一个完整功能的网 ...

随机推荐

  1. [转]判断是否 Win7 且需要管理员权限

    public static void Load() { if (NeedAdmin()) { new Form().ShowDialog(); Environment.Exit(); } } publ ...

  2. 定义function的层级

    不知道标题拟的对不对,今天犯了个错误,图一是正确的写法. 图一 为了代码可以重复利用,我把其中两个方法独立出来,如图二. 图二 后来发现运行错误,说Gxrc未定义,百思不得其解,后来琢磨了好久,才发现 ...

  3. 1111 Online Map (30 分)

    1111 Online Map (30 分) Input our current position and a destination, an online map can recommend sev ...

  4. tcp_tw_recycle和tcp_timestamps导致connect失败问题

    把服务里面的net.ipv4.tcp_timestamps这个参数设置为0后已经可以正常telnet通了. 具体设置方法: 在/etc/sysctl.conf  里面加入 net.ipv4.tcp_t ...

  5. [UE4]动画序列面板

  6. [UE4]解析json数据

    正常的json对象是可以使用单引号的,但是在UE4中的json解析,不能如下使用单引号: {‘name’:'张三'} 而是要使用双引号写成: {"name":"张三&qu ...

  7. 微信公众平台测试帐号的注册与使用(自己的服务器<---->微信后台<---->测式公众号)

    打开注册的网址:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 用手机微信扫描网页左边的二维码,然后在手机上确认即可: 至此 ...

  8. mysql导入导出数据中文乱码解决方法小结(1、navicat导入问题已解决,创建连接后修改连接属性,选择高级->将使用Mysql字符集复选框去掉,下拉框选择GBK->导入sql文件OK;2、phpmyadmin显示乱码的问题也解决,两步:1.将sql文件以utf8的字符集编码另存,2.将文件中sql语句中的字段字符集编码改成utf8,导入OK)

    当向 MySQL 数据库插入一条带有中文的数据形如 insert into employee values(null,'张三','female','1995-10-08','2015-11-12',' ...

  9. Java中的volatile关键字为什么不是不具有原子性

    Java中long赋值不是原子操作,因为先写32位,再写后32位,分两步操作,而AtomicLong赋值是原子操作,为什么?为什么volatile能替代简单的锁,却不能保证原子性?这里面涉及volat ...

  10. move操作

    move一个表到另外一个表空间时,索引不会跟着一起move,而且会失效.(LOB类型例外) 表move,我们分为: *普通表move *分区表move *LONG,LOB大字段类型move来进行测试和 ...