背景:因为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. appium+python自动化43-微信公众号webview操作

    前言 上一篇已经解决切换到微信公众号的webview上了,但是定位webview上元素的时候一直提示找不到,打印page_source也找不到页面上的元素,这个问题困扰了一整天,还好最后找到了原因, ...

  2. pychar入门参考教材

    参考:  http://blog.csdn.net/chenggong2dm/article/category/6137682 让不同py文件运行,直接在文件的标签处右键run即可

  3. ecliplse java log4j 配置

    log4j的一些配置 a). 新建JavaProject>>新建package>>新建Java类: b). import jar包(一个就够),这里我用的是log4j-1.2. ...

  4. 6-3-1appium iOS

    环境准备 brew install carthage npm i -g ios-deploy brew install libimobiledevice --HEAD brew install ide ...

  5. ios关闭自动更新

    iPhone系统更新超级烦人,避免测试机升级的方法 1. 设置禁用网络 设置-网线局域网-使用WLAN与蜂窝移动网的应用,将设置项设置为关闭 2. 一劳永逸,安装证书, 证书https://oldca ...

  6. IE浏览器中overflow:hidden无效,内层元素超出外层div的解决方法

    原文地址:http://www.xin126.cn/show.asp?id=2624 在用css布局的时候,用IE浏览器(ie6.ie7.ie8)预览,有时候会出现内层元素(内部DIV.图片等)超出外 ...

  7. 显示器如何显示一个YUV422格式的图形

    记录在开发过程中对知识点的一些理解: 在开发渲染程序的过程中,需要对视屏文件进行解码解码后特效文件的叠加,使用的技术是(FFmpeg+DirectX) 解码出来的视屏数据格式是YUYV,使用Direc ...

  8. jshint在bat批处理中闪退,代码中无法调用的问题

    先说解决办法:加个call eg: call jshint --version Pause 具体原因有空再更

  9. 经典算法 KMP算法详解

    内容: 1.问题引入 2.暴力求解方法 3.优化方法 4.KMP算法 1.问题引入 原始问题: 对于一个字符串 str (长度为N)和另一个字符串 match (长度为M),如果 match 是 st ...

  10. python函数进阶

    知识内容: 1.函数即变量 2.嵌套函数 3.lambda表达式与匿名函数 4.递归函数 5.函数式编程简介 6.高阶函数与闭包 一.函数即变量 1.变量的本质 声明一个变量,在python里本质上讲 ...