Node.js简介
<h1 class="md-end-block md-heading"><span class="md-plain md-expand">一、简介</span></h1><p class="md-end-block md-p"><span class="md-tab"> <span><code>Node.js</code><span class="md-plain">是一个基于 <span><code>Chrome V8</code><span class="md-plain">引擎的 <span><code>JavaScript</code><span class="md-plain">运行环境。<span><code>node.js</code><span class="md-plain">使用了一个事件驱动、非阻塞式<span><code>I/O(指对磁盘的读写操作)</code><span class="md-plain"> 的模型,使其轻量又高效。<span class=" md-link"><span class="md-plain">Node.js中文文档</span><span class="md-plain"> 。</span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span><code>Node</code><span class="md-plain">是一款使用<span><code>js</code><span class="md-plain">编写的<span><code>web</code><span class="md-plain">服务器,底层是<span><code>C++</code><span class="md-plain">编写,<span><code>node</code><span class="md-plain">中<span><code>js</code><span class="md-plain">引擎使用的使用的是<span><code>chrome</code><span class="md-plain">的<span><code>v8</code><span class="md-plain">引擎。<span><code>Node</code><span class="md-plain">是一个对<span><code>ES</code><span class="md-plain">标准一个实现,<span><code>Node</code><span class="md-plain">也是一个<span><code>JS</code><span class="md-plain">引擎,通过<span><code>Node</code><span class="md-plain">可以使<span><code>js</code><span class="md-plain">代码在服务器端执行。</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span><strong><span><code>Node</code><span class="md-plain">的特点</span></span></strong><span class="md-plain">:</span></span></span></p>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">非阻塞、异步的<span><code>I/O</code></span></span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">事件和回调函数</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">单线程(主线程单线程,后台<span><code>I/O</code><span class="md-plain">线程池)</span></span></span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">跨平台</span></p>
</li>
</ul>
<p class="md-end-block md-p"><span class="md-plain">传统的服务器都是多线程的:每进来一个请求,就创建一个线程去处理请求。<span><code>Node</code><span class="md-plain">的服务器是单线程:<span><code>Node</code><span class="md-plain">处理请求时是单线程,但是在后台拥有一个<span><code>I/O</code><span class="md-plain">线程池。</span></span></span></span></span></span></span></p>
<h1 class="md-end-block md-heading"><span class="md-plain">二、模块化</span></h1>
<p class="md-end-block md-p"><span class="md-tab"> <span><code>ES5</code><span class="md-plain">中没有原生支持模块化,我们只能通过<span><code>script</code><span class="md-plain">标签引入<span><code>js</code><span class="md-plain">文件来实现模块化,在<span><code>node</code><span class="md-plain">中为了对模块管理,引入了<span><code>CommonJS</code><span class="md-plain">规范。</span></span></span></span></span></span></span></span></span></span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span><strong>模块的引用</strong><span class="md-plain">:使用require()函数来引入一个模块。</span></span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span><strong>模块的定义</strong><span class="md-plain">:在node中一个js文件就是一个模块</span></span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">默认情况下在<span><code>js</code><span class="md-plain">文件中编写的内容,都是运行在一个独立的函数中,外部的模块无法访问。</span></span></span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span><strong>导出变量和函数:</strong></span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">①使用<span><code>exports</code></span></span></span></p>
<pre class="md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded"> <span><span class="cm-variable">exports.<span class="cm-property">属性<span class="cm-operator">=<span class="cm-variable">属性值<br> <span><span class="cm-variable">exports.<span class="cm-property">方法<span class="cm-operator">=<span class="cm-variable">函数</span></span></span></span></span></span></span></span></span></span></pre>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">②使用<span><code>module.exports</code></span></span></span></p>
<pre class="md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded"> <span><span class="cm-variable">module.<span class="cm-property">exports.<span class="cm-property">属性 <span class="cm-operator">= <span class="cm-variable">属性值;<br> <span><span class="cm-variable">module.<span class="cm-property">exports.<span class="cm-property">方法 <span class="cm-operator">= <span class="cm-variable">函数;<br> <span><span class="cm-variable">module.<span class="cm-property">exports <span class="cm-operator">= {};</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
<p class="md-end-block md-p"><span><strong>使用:</strong></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">模块的标识:模块的标识就是模块的名字或者路径。<span class="md-softbreak"> <span class="md-tab"> <span class="md-plain">node中通过模块的标识来寻找模块,对于核心模块(npm中下载的模块),直接使用模块的名字对其进行引入<span><code>var fs=require("fs")</code><span class="md-plain">;对于自定义的文件模块,需要通过文件的路径来对模块进行引入。</span></span></span></span></span></span></span></p>
<h1 class="md-end-block md-heading"><span class="md-plain">三、包(package)</span></h1>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">将多个模块组合为一个完整的功能,就是一个包。包结构:</span></span></p>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<p class="md-end-block md-p"><span><code>bin</code><span class="md-plain">:二进制的可执行文件,一般都是一些工具包这中才有</span></span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span><code>lib</code><span class="md-plain">:<span><code>js</code><span class="md-plain">文件</span></span></span></span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span><code>doc</code><span class="md-plain">:文档</span></span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span><code>test</code><span class="md-plain">:测试代码</span></span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span><code>package.json</code><span class="md-plain">:包的描述文件,包含了包各种相关信息:<span><code>name</code><span class="md-plain">、<span><code>version</code><span class="md-plain">、<span><code>dependencies</code><span class="md-plain">、<span><code>main</code><span class="md-plain">、<span><code>bin</code></span></span></span></span></span></span></span></span></span></span></span></p>
</li>
</ul>
<h1 class="md-end-block md-heading"><span class="md-plain">四、npm(Node Package Manager Node)</span></h1>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">通过<span><code>npm</code><span class="md-plain">可以对<span><code>node</code><span class="md-plain">中的包进行上传、下载、搜索等操作。<span><code>npm</code><span class="md-plain">会在安装完<span><code>node</code><span class="md-plain">以后自动安装。<span class="md-softbreak"> <span class="md-plain"><span class="md-tab"> <span><strong>npm的常用指令</strong></span></span></span></span></span></span></span></span></span></span></span></span></span></span></p>
<pre class="md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded"> <span>查看npm的版本:npm <span class="cm-attribute">-v<br> <span>查看所有模块的版本npm version<br> <span>初始化项目(创建package.json)npm init<br> <span>安装指定的包npm i/install 包名<br> <span>安装指定的包并添加依赖npm i/install 包名 <span class="cm-attribute">--save<br> <span>全局安装(一般是某些工具)npm i/install 包名 <span class="cm-attribute">-g<br> <span>安装当前项目所依赖的包npm i/install 包名<br> <span>搜索包:npm s/search 包名<br> <span>删除一个包:npm r/remove 包名 </span></span></span></span></span></span></span></span></span></span></span></span></pre>
<h1 class="md-end-block md-heading"><span class="md-plain">五、文件系统(File System)</span></h1>
<h2 class="md-end-block md-heading"><span class="md-plain">5.1 缓冲区</span></h2>
<p class="md-end-block md-p"><span class="md-tab"> <span><code>Buffer</code><span class="md-plain">和数组的结构非常类似,<span><code>Buffer</code><span class="md-plain">是用来存储二进制数据的。<span><code>Buffer</code><span class="md-plain">中方法:</span></span></span></span></span></span></span></p>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<p class="md-end-block md-p"><span><code>Buffer.from</code><span class="md-plain">(字符串):将一个字符串中内容保存到一个<span><code>Buffer</code><span class="md-plain">中。</span></span></span></span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span><code>buf.toString()</code><span class="md-plain">:将<span><code>buffer</code><span class="md-plain">转换为一个字符串。</span></span></span></span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span><code>Buffer.alloc(size)</code><span class="md-plain">:创建一个指定大小的<span><code>buffer</code><span class="md-plain">对象。</span></span></span></span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span><code>Buffer.allocUnsafe(size)</code><span class="md-plain">:创建一个指定大小的<span><code>buffer</code><span class="md-plain">对象,可以包含敏感数据。</span></span></span></span></p>
</li>
</ul>
<h2 class="md-end-block md-heading"><span class="md-plain">5.2 fs模块</span></h2>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">在<span><code>Node</code><span class="md-plain">通过fs模块来对系统中的文件进行操作,fs模块是node中已经继承好了,不需要在npm下载,直接引入即可。</span></span></span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">引入<span><code>fs</code><span class="md-plain">:<span><code>var fs =require("fs")</code><span class="md-plain">,<span><code>fs</code><span class="md-plain">模块中的大部分操作都提供了两种方法,同步方法(带<span><code>sync</code><span class="md-plain">)和异步方法。</span></span></span></span></span></span></span></span></span></span></p>
<p class="md-end-block md-p md-focus"><span class="md-tab"> <span class="md-plain">写入文件分为:1、同步写入 2、异步写入 3、简单写入 4、流式写入</span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain md-expand">读取文件分为:1、同步读取 2、异步读取 3、简单读取 4、流式读取</span></span></p>
<p class="md-end-block md-p"><span class="md-tab"> <span><strong>fs中的方法:</strong></span></span></p>
<pre class="md-fences md-end-block md-fences-with-lineno ty-contain-cm"> <span><span class="cm-variable">打开文件<br> <span> <span class="cm-variable">fs.<span class="cm-property">open(<span class="cm-variable">path,<span class="cm-variable">flags[,<span class="cm-variable">model],<span class="cm-variable">callback)<br> <span> <span class="cm-variable">fs.<span class="cm-property">openSync(<span class="cm-variable">path,<span class="cm-variable">flags[,<span class="cm-variable">model])<br> <span> <span class="cm-variable">注:flag为读取文件的方式,<span class="cm-variable">r只读,w可写<br> <span><span><br> <span><span class="cm-variable">读写文件<br> <span> <span class="cm-variable">fs.<span class="cm-property">write(<span class="cm-variable">fd, <span class="cm-variable">string[, <span class="cm-variable">position[, <span class="cm-variable">encoding]], <span class="cm-variable">callback)<br> <span> <span class="cm-variable">fs.<span class="cm-property">writeSync(<span class="cm-variable">fd, <span class="cm-variable">string[, <span class="cm-variable">position[, <span class="cm-variable">encoding]])<br> <span><span><br> <span> <span class="cm-variable">fs.<span class="cm-property">read(<span class="cm-variable">fd, <span class="cm-variable">buffer, <span class="cm-variable">offset, <span class="cm-variable">length, <span class="cm-variable">position, <span class="cm-variable">callback)<br> <span> <span class="cm-variable">fs.<span class="cm-property">readSync(<span class="cm-variable">fd, <span class="cm-variable">buffer, <span class="cm-variable">offset, <span class="cm-variable">length, <span class="cm-variable">position)<br> <span class="cm-tab-wrap-hack"><span class="cm-tab"> <br> <span><span class="cm-variable">关闭文件<br> <span> <span class="cm-variable">fs.<span class="cm-property">close(<span class="cm-variable">fd,<span class="cm-variable">callback)<br> <span> <span class="cm-variable">fs.<span class="cm-property">closeSync(<span class="cm-variable">fd)<br> <span class="cm-tab-wrap-hack"><span class="cm-tab"> <span class="cm-tab"> <br> <span><span class="cm-variable">简单文件读取和写入<br> <span> <span class="cm-variable">fs.<span class="cm-property">writeFile(<span class="cm-variable">file, <span class="cm-variable">data[, <span class="cm-variable">options], <span class="cm-variable">callback)<br> <span> <span class="cm-variable">fs.<span class="cm-property">writeFileSync(<span class="cm-variable">file, <span class="cm-variable">data[, <span class="cm-variable">options])<br> <span><span><br> <span> <span class="cm-variable">fs.<span class="cm-property">readFile(<span class="cm-variable">path[, <span class="cm-variable">options], <span class="cm-variable">callback)<br> <span> <span class="cm-variable">fs.<span class="cm-property">readFileSync(<span class="cm-variable">path[, <span class="cm-variable">options])<br> <span><span><br> <span><span class="cm-variable">流式文件读取和写入(<span class="cm-variable">流式读取和写入适用于一些比较大的文件)<br> <span> <span class="cm-variable">fs.<span class="cm-property">createWriteStream(<span class="cm-variable">path[, <span class="cm-variable">options])<br> <span> <span class="cm-variable">fs.<span class="cm-property">createReadStream(<span class="cm-variable">path[, <span class="cm-variable">options])</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
<p><span> </span></p><br><br>
来源:https://www.cnblogs.com/hucheng1997/p/11152777.html
頁:
[1]