题外话

为什么HTML5是跨平台的?

很简单,因为HTML5想要运行,依赖于支持HTML5浏览器。只要不同平台上有支持HTML5的浏览器,那么HTML5就可以在不同平台上实现。比如说,移动端、PC端、Linux、Unix等系统都有支持运行HTML5的浏览器,所以说HTML5是跨平台的。


前言

学习nodeJS可以了解前后台交互过程。

nodejs是JavaScript的运行环境,允许js在服务器上运行。这样一来,nodejs就把js变成了服务器端语言。

而在没有nodejs之前,js不能脱离浏览器平台等运行;但nodejs可以让js脱离浏览器单独运行。

服务器端语言和客户端语言的区别在哪里呢?— 安全性。
客户端语言不能读取本地硬盘上的东西(为了信息安全);但服务器语言可以,比如可以读取本地数据库。

JavaScript的定义是什么?
JavaScript是具有高安全性的解释型脚本语言。而这个高安全性指的就是js不能读取本地硬盘。

所以js本身不是服务端语言,但nodejs扩展了js的运行范围,让js能运行在服务器端,让js脱离浏览器运行,让js能读取本地硬盘数据,从而操作数据库。


NodeJS 实现静态服务器

1.1、nodeJS的定义

Node.js是一个基于Chrome V8引擎(编译成原生机器码)的,让JavaScript运行在服务器端的运行环境,它让JavaScript的触角伸到了服务器端。

1.2、nodeJS特性

node是单线程的,擅长高并发处理,适合高IO的操作,擅长I/O密集型处理。

nodejs开发服务端可以和java服务布在一起吗_服务器端

1.2.1、单线程

NodeJS不会为每个连接客户创造一个新的线程,而是仅用一个线程。也就是说,Node.js是单线程。

多线程:

nodejs开发服务端可以和java服务布在一起吗_node_02


单线程:

nodejs开发服务端可以和java服务布在一起吗_服务器端_03

1.2.2、非阻塞式IO

NodeJS在访问高IO操作后不会等待其完成,而是立即去执行其他代码,操作完成后会使用回调函数返回。

能高效的利用当前线程,不造成硬件浪费。

1.2.3、事件驱动

NodeJS通过事件来驱动整个程序的进行。

由于是单线程,所以把高IO的操作移动到事件队列中等待完成,完成后通过回调函数的方式返回给线程来进行处理。

把这个循环处理的过程称之为:事件环。

1.3、nodeJS运行环境—REPL交互式解释器

Shell一般会被叫做:Node.js REPL(交互式解释器) 。

我们可以在终端中输入命令,并接收系统的响应。Node Shell是快速运行测试Node的方式之一。可以进行简单的内容测试。

使用:

进入DOS命令行,输入node,执行后就能开启node解释器,帮助我们翻译JavaScript。就是说,这一直接写js代码,然后回车自动执行得出结果。

nodejs开发服务端可以和java服务布在一起吗_HTML5_04


我突然发现这个功能跟谷歌的Chrome浏览器的“检查”有点像。

nodejs开发服务端可以和java服务布在一起吗_HTML5_05


所以,轻量级的简单的操作,都可以直接在node解释器里面写。

nodejs开发服务端可以和java服务布在一起吗_单线程_06


这种方式,一般做轻量级测试时会用。

1.4、nodeJS—魔术变量

nodejs开发服务端可以和java服务布在一起吗_node_07


注意:__filename 双底杠

nodejs开发服务端可以和java服务布在一起吗_单线程_08

nodejs开发服务端可以和java服务布在一起吗_服务器端_09

2.1、nodeJS模块

node中以模块来划分功能,一个js是一个模块,多个模块相互引用形成一个模块化式项目

Node应用由模块组成,采用 CommonJS 模块规范。

2.2、nodeJS Comment.js模块书写

js文件因为作用域的问题,变量和函数只能在当前文件中进行使用。如果想在当前模块外引用,必须导出使用。

Comment.js模块导出常用两种方式:exports/module.exports。

exports返回的是模块函数,module.exports返回的是模块本身。目的是让这些内容进行暴露,然后在使用的时候用require来引入。这就跟ES6中的有区别了,ES6用export导出,然后import导入,视情况看是否用解构。这两种规范要弄清。

通常情况下都是用module.exports导出。

nodejs开发服务端可以和java服务布在一起吗_服务器端_10

nodejs开发服务端可以和java服务布在一起吗_单线程_11

2.3、nodeJS模块—优点

减少代码重复,提高利用率;划分功能,方便管理;方便使用第三方模块。

NodeJS优缺点:

模块化,复用性高,但是文件多;但模块化编程思想是未来的一种发展趋势,而且就目前看来呈不可逆的态势。