### 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:\Users\Administrator,而不是相对于当前JS文件位置。)