Node.js

###  node.js是什么?

node.js是一个开发平台(Java开发平台、.NET开发平台、PHP开发平台、Apple开发平台)。有自己对应的编程语言、语言运行时、实现特定功能的API(SDK:Software Development Kit)。

编程语言:JavaScript

语言运行时:基于Chrome V8 JavaScript引擎构建

a)开发控制台程序(命令行程序、CLI程序)

b)桌面运行程序(GUI):借助node-webkit、electron等

c)Web应用程序:网站

###  node.js全栈开发技术栈:EMAN

a)M:MongoDB(数据库)

b)E:Express(Web开发框架)

c)A:Angular(前台)

d)N:node.js(后端)

###  node.js网站

a)官方网站:https://nodejs.org/en/

b)中文网站:http://nodejs.cn/

c)中文社区:https://cnodejs.org/

###  学习目标

a)了解服务器开发过程

b)会使用node.js开发基本的 http 服务程序(web应用程序)

###  node.js安装与配置

下载:进入node.js官方网站,点击 download ,进入node.js下载页面,选择与操作系统对应的node.js,点击下载,对下载软件傻瓜式安装,安装完成后,配置环境变量。

a)LTS版本:Long-Term Support版本,长期支持版,即稳定版。

b)Current版本:Latest Feature版本,最新版本,新特性会在该版本中最先加入。

因为本人操作系统是Windows 64位故选择如下:

注意:

a)安装完成后,通过 “管理员方式”打开命令窗口,输入‘node  -v’来确定安装成功与否,如果出现node.js版本号,说明安装成功。

b)最好配置环境变量,让node.js在任何环境下都可以启动。

###  node.js开发Web应用程序和PHP、Java、ASP.NET等传统模式开发Web应用程序的区别

***传统模式***

有Web容器

***node.js开发web应用程序***

没有web容器-->本身就是一个http服务器,本身就可以创建一个http服务器。

 

Web容器,即Web服务器,作用就是监听用户请求,根据不同请求做不同的处理。

###  REPL介绍

1、REPL全城:Read-Eval-Print-Loop(交互式解释器)

a)R:读取,读取用户输入,解析输入的JavaScript数据结构并存储在内存中;

b)E:执行,执行输入的数据结构;

c)P:打印,输出结果;

d)L:循环,循环操作以上步骤,直至用户两次按下Ctril-C按钮退出。

2、在REPL中编写程序(类似于浏览器开发人员工具中的控制台功能)

直接在命令窗口中输入 node 命令进入 REPL 环境中。

3、按两次Ctril+c 退出REPL界面,或者输入 .exit 退出 REPL界面。

+按住Ctril键不放开,按两下 C 键。 

###  JavaScript命名规则

不要用中文

不要包含空格

不要出现node关键字

建议以“_”分割关键字

###  node.js模块

Node.js的 API 通过node.js的模块使用。部分模块使用时可以直接使用,部分模块使用时需要通过require()函数来加载该模块。

例如:

Process模块在使用的时候无需通过require()函数来加载该模块,可以直接使用;

Fs模块在使用时必须通过require()函数加载。 1 var fs=require( ‘fs’ ); 

原因:

process模块是全局模块,fs模块是非全局模块,全局模块可以直接使用,而非全局模块需要先通过require()函数先加载,再使用。全局模块可以在官网上查询。

###  文件写入与写出

JS在浏览器端不能进行文件操作,因为浏览器不提供文件操作的API。

但是Node.js提供了文件操作的API,可以通过JS直接调用。

使用到的模块:var fs=require ( ‘ fs ‘ );

***文件写入***

 1 /*************执行文件写入操作******************/
 2 //1.加载文件操作模块-fs模块
 3 var fs=require("fs");
 4 
 5 //2.实现文件写入操作
 6 var msg="hello world";
 7   //调用fs.writeFile()进行文件写入
 8   /*
 9     fs.writeFile(file,data[,option],callback)
10     file:文件路径
11     data:两种数据类型,string/Buffer.表示要向文件中写入的数据,Buffer就是一个字节数组,像音频、视频、字符串和各种文件等,最终都是以字节形式存储在计算机中。
12     option:可选项,表示写入文件的编码,默认为“utf-8”
13     callback:回调函数。node.js是事件驱动的。当文件操作完毕以后,就会触发一个写文件操作完毕事件,当写文件完毕后,会回调该函数。当回调该函数时,说明写文件操作结束了。
14   */
15 
16 fs.writeFile("测试.txt", str, function(err){
17     /*
18     err:回调函数中只有这样一个参数,就是错误对象,如果文件写入成功,就没有错误,没有错误,err里面就是null,
19     如果文件写入失败了,err里面肯定不是null,而是一个错误对象。
20     即:
21     如果err====null,表示写入文件成功,没有错误!
22     如果err不是null,表示写入文件失败
23     */
24     if(err){
25         console.log("写文件出错了,具体错误:"+err);
26     }else{
27         console.log("成功!");
28     }
29 });

***文件读取***

 1 /*************执行文件读取操作******************/
 2 // //1.加载fs模块
 3  var fs=require('fs');
 4 
 5 //2.调用fs.readFile()函数
 6 /*
 7     fs.readFile(file[,option],callback);
 8     file:待读取的文件;
 9     option:可选参数,用于指定读取文件时读取的编码;
10     callback:回调函数,针对此处回调函数的讲解看具体代码;
11 */
12 
13 fs.readFile("测试.txt",function(err,data){
14     /*
15         function(err,data){}
16         err:错误对象,具体讲解见fs.writeFile();
17         data:读取的文件中的数据。data参数的数据类型是一个Buffer对象,里面保存的是一个一个的
18              字节(理解为字节数组),在文本文件的读取中,最后需要将Buffer对象转换为字符串对象,
19              使用data.toString([option])方法。
20              option:用以指定以什么编码格式转换data对象,默认是 utf8 ,此处可以不写,建议写上。
21              如果fs.readFile()中的option写上了,此处的data.toString()可以不写。
22     */
23     if(err){
24         throw err;
25     }
26     // console.log(data.toString());
27     console.log(data.toString("utf8"));
28     //注意:读取.txt格式时候可能会乱码。
29 });

***注意:文件读取中存在的问题***

代码如下:

1 //读写文件的路径问题
2 var fs=require("fs");
3 
4 fs.readFile('./hello.txt','utf8',function(err,data){
5     if(err){
6         throw err;
7     }
8     console.log(data);
9 })

此处的运行结果:

原因如下:

1、  在 node.js 环境配置好以后,在命令行窗口中,不论哪个磁盘都可以运行;

2、  在读文件的时候,此处用的是相对路径 “./”;

3、  但是在命令行窗口中,“./”相对的是执行 node 命令的路径;

4、  在3中,“./”并不是相对于正在执行的这个js文件的路径,相对的是磁盘的路径;

(即相对于C:UsersAdministrator,而不是相对于当前JS文件位置。)

原文地址:https://www.cnblogs.com/WangYujie1994/p/10823820.html