之前讲ES6的时候有提过一部分Node的知识,简单回顾下:一文读懂ES6
npm国内镜像:<code>https://npm.taobao.org</code>
配置国内源:<code>npm install -g cnpm --registry=https://registry.npm.taobao.org</code>
然后就可以把<code>cnpm</code>当作<code>npm</code>来用了,比如之前的<code>React</code>组件案例:
<code>cnpm install react</code>
<code>cnpm install react-dom</code>
<code>cnpm i babel-core@old</code>
卸载安装的包:<code>npm uninstall -g uuid</code>用<code>npm</code>而不是<code>cnpm</code>
常用参数说明:
<code>i</code>是<code>install</code>的简写
<code>-g</code>是安装到全局环境中(默认是当前目录)
<code>-D</code>添加为开发依赖(<code>-D ==> --save-dev</code> 开发环境)
<code>-S</code>添加为生产依赖(<code>-S ==> --save</code> 生产环境)
eg:<code>cnpm i express -S</code>
eg:<code>cnpm init</code>之后:

PS:你把依赖包删了也没事,执行<code>cnpm i</code>就会会根据<code>package.json</code>自动安装依赖包
课外阅读:
这个之前也说过,可以看看:VSCode and NoteBook for JavaScript | NodeJS,简单说下:
每次F5运行的时候选一下<code>NodeJS</code>,或者添加一下调试的配置文件
<code>nodejs</code>用法和<code>js</code>基本一样,只是多了些服务器的模块,eg:
如果想同时运行<code>nodejs</code>和<code>html</code>再添加下配置就行了,比如:
配置完成后:想运行HTML就选择谷歌浏览器
想运行<code>nodejs</code>的<code>js</code>文件就选择启动程序(现在运行JS文件的时候,F5即可自动切换成node)
<code>${workspaceRoot}</code> VS Code当前打开的文件夹
<code>${file}</code> 当前打开的文件
<code>${relativeFile}</code> 相对于<code>workspaceRoot</code>的相对路径
<code>${fileBasename}</code> 当前打开文件的文件名
<code>${fileDirname}</code> 所在的文件夹,是绝对路径
<code>${fileExtname}</code> 当前打开文件的扩展名
<code>ijavascript</code>依赖于<code>Python2.7</code>,详细过程:Jupyter NoteBook IJavaScript 配置
然后就和Python一样用了:
这块官方文档写的很详细,我就简单说说,后面用到再详细说
中文文档:http://nodejs.cn/api
官方文档:https://nodejs.org/api
文档:<code>http://nodejs.cn/api/http.html</code> or <code>https://nodejs.org/api/http.html</code>
NodeJS既然作为服务器,那得先有个服务器的样子,我们来个简单的案例:
效果:
其他内容需要结合其他模块一起讲解
文档:<code>http://nodejs.cn/api/fs.html</code> or <code>https://nodejs.org/api/fs.html</code>
这个是IO对应的模块,推荐使用异步方法,简单看看:(<code>xxxFileSync</code>是同步方式,不建议使用)
In [1]:
In [2]:
In [3]:
In [4]:
In [5]:
PS:如果文件不是文本文件,就不能<code>toString</code>了(<code>data</code>默认是<code>buffer</code>类型)
图片照常打开:
简单小结一下:
读取文件:<code>fs.readFile("xxx", (ex, data) => { });</code>
创建文件:<code>fs.writeFile("xxx", data, ex => {});</code>
追加文件:<code>fs.appendFile("xxx", data, ex => {});</code>
<code>data</code>是<code>buffer</code>类型,内置了:
<code>toString()</code>:buffer转换成字符串
<code>toJSON()</code>:buffer转化成Json
In [6]:
上面几个方法(eg:<code>readFile</code>)都是先把数据都缓存到内存中,然后才回调,这样比较浪费内存,对于大文件不友好,so ==> 流走起
用法比较简单,看个案例:
还有一些类似于监听的事件:
文档:<code>http://nodejs.cn/api/url.html</code> or <code>https://nodejs.org/api/url.html</code>
说<code>url</code>模块之前得先说下<code>querystring</code>模块
文档:<code>http://nodejs.cn/api/querystring.html</code> or <code>https://nodejs.org/api/querystring.html</code>
这个是专门针对参数进行解析的,来个案例:
注意:querystring.parse 只是对?后面(不包括<code>?</code>)的参数进行解析(以<code>=</code>和<code>&</code>分隔)
上面说下<code>querystring</code>只是一个铺垫,基本上不太用,<code>url</code>模块已经包含这个了:
PS:一般都是这么用的:
结合上面的<code>HTTP模块</code>,来个简单的<code>web服务器</code>:
输出:(<code>www</code>目录就两个文件,一个<code>test.html</code>,一个<code>test.png</code>)
推荐写法:
PS:<code>request</code>和<code>response</code>就是一个典型的读写流(<code>ReadStream</code>、<code>WriteStream</code>)
文档:<code>http://nodejs.cn/api/zlib.html</code> or <code>https://nodejs.org/api/zlib.html</code>
先看个案例:(<code>zlib</code>是读写流)
结合上面再来个加强版:
输出对比:
文档:<code>http://nodejs.cn/api/path.html</code> or <code>https://nodejs.org/api/path.html</code>
这个主要是针对路径的模块,看个案例:<code>path.parse()</code>
文档:<code>http://nodejs.cn/api/crypto.html</code> or <code>https://nodejs.org/api/crypto.html</code>
这块主要就是用来加密(签名)的,很简单:
In [7]:
In [8]:
In [9]:
In [10]:
文档:<code>http://nodejs.cn/api/os.html</code> or <code>https://nodejs.org/api/os.html</code>
这块是系统相关的模块,看个常用的案例:
In [11]:
In [ ]:
可以参考我之前讲的Python多进程进行对比学习:https://www.cnblogs.com/dotnetcrazy/p/9363810.html
输出:
PS:NodeJS注意下面几地方:
子进程可以共用一个端口
并发的时候,如果不等到某个核的CPU100%,其他核的CPU就看戏(不工作)
这个是第三方模块,如果没安装:
<code>cnpm init</code>
<code>cnpm i uuid -D</code>(开发环境) or <code>cnpm i uuid -S</code>(生产环境)

使用案例:
作者:毒逆天
出处:https://www.cnblogs.com/dotnetcrazy
打赏:<b>18i4JpL6g54yAPAefdtgqwRrZ43YJwAV5z</b>
本文版权归作者和博客园共有。欢迎转载,但必须保留此段声明,且在文章页面明显位置给出原文连接!