nodeJS 如何使用和简介
更新日期:
本篇算是笔记,零散地记录下自己觉得有用的小东东。
实战简介
如何使用
- 管理员 node.js command prompt
- cmd.exe 下直接执行也可以
node -v
npm -v
REPL
REPL,Read-Eval-Print Loop
node 有自己的虚拟运行环境,输入 node 并回车,就会打开控制台,当提示符从 $(window下依然是>)变成 >(不同 shell 可能会有不同的提示符)就可以输入你想执行的任何 js 或 nodejs 代码了。此处,类似于 Chrome 的开发工具中的控制台。ctrl+c 退出
其他
可以用 node 加载直接运行一个 js 文件( node_ppp 目录下有一个 add.js 文件)
也可以用 node 直接执行js脚本
nodeJS 和 javascript
相似之处
nodeJS 是建立在 Google chrome 的 V8 引擎和它的 ECMAScript 之上。所以,它的语法和前端的 JS 是非常类似的。它和浏览器中对 ECMAScript 的实现有一些比较细微的差别,但总体而言,两者没啥区别。
nodeJS 和 javascrip 都有的:
- 自动类型转换:
- JS 中的基本类型:
String Number Boolean
Undefined Null
RegExp
Object
此外,Buffer - 是 nodeJS 特殊的数据类型
buffer,做数据存储非常有效,eg. 从文件系统中读取内容 or 接受网络包内容等
主要区别
虽然是同一个标准下的模型,它们之间还是有些主要区别的。
nodeJS 进程相关信息
每一个运行中的 nodeJS 脚本本质上都是一个进程。比如:
输出当前机器上所有运行的 nodeJS 程序,也可以获取同一个进程的相关的有用信息
pid: process id 进程 id
cwd: current work direction 当前工作目录
全局对象
- JS 的全局是 window,当没写 var 时,变量会默认为全局变量
- nodeJS 使用了不同的设计方法,它默认所有的东西都是本地的
某种意义上:window = global(全局对象) + process(进程)
当然,用来展现 web 页面中的 DOM 中的 document对象在 nodeJS 中不会存在的啦
nodeJS 中还有:module.exports 和 exports
导入和导出模块
JS 中没有模块的概念(当然是 ES6 之前),但是 nodeJS 是直接支持模块的( nodeJS 是 CommonJS 规范的实现)。
模块相关的概念,详见博客的 模块化编程的系列介绍
nodeJS
核心模块
nodeJS 的核心模块,是轻量的,它被有意地控制在很小的体积。主要有:
- http: nodeJS 从 HTTP 服务器获取相应内容
- util:模块提供了 调试用的工具方法
- querystring:模块提供了 处理查询字符串的工具
- url:模块提供了 URL 的相关处理和转化
- fs:模块主要处理文件系统相关的操作,比如读写文件等。所有的方法都有同步和异步两种操作
使用核心模块不需要安装,只要需要的时候直接 require() 进来就可以了。
非核心模块
非核心的模块(其他的模块可以通过 npm 来注册安装)
如何编写自己的模块:
非常重要的工具,如:
(1)Crypto:包含随机生成器、MD5、HMAC-SHA1 和其他一些算法
(2)Path:处理系统路径(不同的文件分隔符)
(3)String decoder:将 buffer 或字符串类型数据解码
npm
npm 最大优势在于:它的所有依赖都是本地模式安装
作为初学者,我们只需要知道,用以下两个来对模块进行本地模式安装:
(1)package.json 文件
(2)node_modules 文件夹( 管理依赖啊 依赖更新啊)
安装命令是 npm install name 就可以了~~
看我们通过 npm 安装好了的模块,就在下面的文件夹中:
%appdata% npm\node_modules\
更多
浏览器 API 工具
nodeJS 中许多工具函数都来自于浏览器端 JS 的应用程序接口 (API)
eg.
Array 的方法 join() pop() slice() 等等;
Math 的方法 random();
String 的方法 substr() indexof();
还有 setInterval() setTimeout() foreach() console() 等等
创建 web 应用
nodeJS 的一个重要作用:创建 web 应用。它在网络上的繁荣发展,得益于它的异步特性和它的内置模块( net 和 http )
使用 nodeJS 的 HTTP 模块来创建一个简单的服务器。eg.省略…
执行,在浏览器中打开 http://localhost:1337
或者再终端/命令行中执行 $ curl “http:://localhost:1337”
nodeJS 应用是存储在内存中的,所以修改了源码后,必须重启进程(也就是 node)才能看到变化。
当然已经有工具实现了自动化-它们通过 fs 模块的方法监听,当文件内容发生变化时就重启服务器。eg.forever、node-dev、nodemon、supervisor。
我们都知道,ExpressJS 在默认情况下每次都会为新请求重新加载模板文件。因此,一定不要重启服务。不过我们可以通过设置 view cache 来缓存模板(更多的设置)。
$ node -help //帮助
读写文件
在 nodeJS 中读写文件:
nodeJS 的数据流:数据流-应用在处理数据的的时候还可以同时接收数据(适用于处理超大数据集合 eg.视频处理、数据库迁移)
—使用流输出二进制文件内容的基本例子
—默认情况下,nodeJS 使用 buffer 来处理流。
回调代码可以用事件的 emit 或者 promise 的方式来替代 or 直接使用异步库
调试
- nodeJS 的调试有以下工具:
Core NodeJS Debugger:没有图形化用户接口的精简工具
Node Inspector:Google Chrome开发者工具的接口
WebStorm 和其他集成开发环境一起 - 核心 nodeJS 调试:
console.log()
debugger;//
并且使用 $ node debug program.js //来启动调式进程
主要的调试命令:
(1)next, n: 单步执行
(2)cont, c: 继续执行,直到遇到下一个断点 continue
(3)step, s: 单步执行并进入函数
(4)out, o: 才函数中跳出
(5)watch(expression): 把表达式 expression 加入监视列表