- 3
- 0
- 约7.33千字
- 约 33页
- 2017-10-22 发布于北京
- 举报
NodeJs教程JavaScript标准参考教程
Node.js 概述
目录
简介
安装与更新
版本管理工具nvm
基本用法
REPL环境
异步操作
全局对象和全局变量
模块化结构
概述
核心模块
自定义模块
http模块
基本用法
处理POST请求
发出请求:get方法
发出请求:request方法
搭建HTTPs服务器
模块属性
模块方法
Buffer对象
异常处理
try...catch结构
uncaughtException事件
正确的编码习惯
命令行脚本
参考链接
Node是JavaScript语言的服务器运行环境。所谓“运行环境”有两层意思:首先,JavaScript语言通过Node在服务器运行,在这个意义上,Node有点像JavaScript虚拟机;其次,Node提供大量工具库,使得JavaScript语言与操作系统互动(比如读写文件、新建子进程),在这个意义上,Node又是JavaScript的工具库。
Node内部采用Google公司的V8引擎,作为JavaScript语言解释器;通过自行开发的libuv库,调用操作系统资源。
访问官方网站了解安装细节。
安装完成以后,运行下面的命令,查看是否能正常运行。
更新node.js版本,可以通过node.js的n模块完成。
上面代码通过n模块,将node.js更新为最新发布的稳定版。
n模块也可以指定安装特定版本的node。
如果想在同一台机器,同时安装多个版本的node.js,就需要用到版本管理工具nvm。
安装以后,nvm的执行脚本,每次使用前都要激活,建议将其加入~/.bashrc文件(假定使用Bash)。激活后,就可以安装指定版本的Node。
nvm也允许进入指定版本的REPL环境。
如果在项目根目录下新建一个.nvmrc文件,将版本号写入其中,就只输入nvm use命令即可,不再需要附加版本号。
下面是其他经常用到的命令。
安装完成后,运行node.js程序,就是使用node命令读取JavaScript脚本。
假定当前目录有一个demo.js的脚本文件,运行时这样写。
在命令行键入node命令,后面没有文件名,就进入一个Node.js的REPL环境(Read–eval–print loop,读取-求值-输出循环),可以直接运行各种JavaScript命令。
如果使用参数 --use_strict,则REPL将在严格模式下运行。
REPL是Node.js与用户互动的shell,各种基本的shell功能都可以在里面使用,比如使用上下方向键遍历曾经使用过的命令。
特殊变量下划线(_)表示上一个命令的返回结果。
在REPL中,如果运行一个表达式,会直接在命令行返回结果。如果运行一条语句,就不会有任何输出,因为语句没有返回值。
上面代码的第二条命令,没有显示任何结果。因为这是一条语句,不是表达式,所以没有返回值。
Node采用V8引擎处理JavaScript脚本,最大特点就是单线程运行,一次只能运行一个任务。这导致Node大量采用异步操作(asynchronous opertion),即任务不是马上执行,而是插在任务队列的尾部,等到前面的任务运行完后再执行。
由于这种特性,某一个任务的后续操作,往往采用回调函数(callback)的形式进行定义。
上面代码就把进一步的处理,交给回调函数callback。
Node约定,如果某个函数需要回调函数作为参数,则回调函数是最后一个参数。另外,回调函数本身的第一个参数,约定为上一步传入的错误对象。
上面代码中,callback的第一个参数是Error对象,第二个参数才是真正的数据参数。这是因为回调函数主要用于异步操作,当回调函数运行时,前期的操作早结束了,错误的执行栈早就不存在了,传统的错误捕捉机制try...catch对于异步操作行不通,所以只能把错误交给回调函数处理。
上面代码中,db.User.get方法是一个异步操作,等到抛出错误时,可能它所在的try...catch代码块早就运行结束了,这会导致错误无法被捕捉。所以,Node统一规定,一旦异步操作发生错误,就把错误对象传递到回调函数。
如果没有发生错误,回调函数的第一个参数就传入null。这种写法有一个很大的好处,就是说只要判断回调函数的第一个参数,就知道有没有出错,如果不是null,就肯定出错了。另外,这样还可以层层传递错误。
Node提供以下几个全局对象,它们是所有模块都可以调用的。
global:表示Node所在的全局环境,类似于浏览器的window对象。需要注意的是,如果在浏览器中声明一个全局变量,实际上是声明了一个全局对象的属性,比如var x = 1等同于设置window.x = 1,但是Node不是这样,至少在模块中不是这样(REPL环境的行为与浏览器一致)。在模块文件中,声明var x = 1,该变量
您可能关注的文档
- HUBA604天津纺织机械过滤网风压差开关.docx
- HY5A水平回旋调速振荡器.doc
- h灰姑娘很有意思的对比.doc
- IBMThinkPadT410iBIOS(CMOS)设置说明图解.docx
- IBATISDWR构建webapp.doc
- IBMStorwizeV7000介绍.doc
- IBM顾问组对东方园林PBC工作进行现场答疑.docx
- IDC如何保障云计算时代的信息安全.doc
- IE和Firefox浏览器CSS网页布局不同点.doc
- Ifx整体非美货币暂时保持盘整的态势.doc
- 2026年及未来5年内中国液体氩气行业投资前景及策略咨询研究报告.docx
- 2026年及未来5年内中国黄铜合页行业投资前景及策略咨询研究报告.docx
- 2026年及未来5年内中国竹工艺家具行业投资前景及策略咨询研究报告.docx
- 2025年中国微机数显自动分析仪市场调查研究报告.docx
- 2026年及未来5年内中国微尘白色粉笔行业投资前景及策略咨询研究报告.docx
- 2025年中国微电脑型压胶机市场调查研究报告.docx
- 2026年及未来5年内中国数字化等功游泳训练测试系统行业投资前景及策略咨询研究报告.docx
- 2025年中国圆形花瓶市场调查研究报告.docx
- 2026年及未来5年内中国植物纤维静淀过滤器行业投资前景及策略咨询研究报告.docx
- 2025年中国超音波手套机市场调查研究报告.docx
原创力文档

文档评论(0)