Node-RED 是构建物联网(IOT, Internet of Things)应用程序的一个强大工具,其重点是简化代码块的“连接”以执行任务。它使用可视化编程方法,允许开发人员将预定义的代码块(称为“节点”,Node)连接起来执行任务。连接的节点,通常是输入节点、处理节点和输出节点的组合,当它们连接在一起时,构成一个“流”(Flows)。
Node-RED最初是IBM在2013年末开发的一个开源项目,以满足他们快速连接硬件和设备到Web服务和其他软件的需求——作为物联网的一种粘合剂,它很快发展成为一种通用的物联网编程工具。重要的是,Node-RED已经迅速形成一个重要的、不断增长的用户基础和一个活跃的开发人员社区,他们正在开发新的节点,同时允许程序员复用Node-RED代码来完成各种各样的任务。
Node-Red是IBM技术团队发起的一个项目,在2013年开源,最初主要的应用领域是物联网,用于实现各种服务之间的数据传输,在IBM的Bluemix上也提供了Node-Red的云服务。物联网的智能设备制造公司也通过使用Node-Red对硬件设备进行控制,但是作为Node-Red作为一个可视化的数据流程编辑工具,在通过Web页面进行可视化的数据流程的编辑方面是具有通用性的,
虽然Node-RED 最初是用来处理物联网的应用,也就是说,它与现实世界交互和控制设备,随着它的发展,它已经成为一个较为开放的物联网开发工具。
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型。
使用npm作为官方包管理器
以ECMASCRIPT为基础,然后在这个基础上扩展出来的一些操作其他东西(即操作非浏览器)的一些方法;
组成:
ECMAScript(语言基础,如:语法、数据类型结构以及一些内置对象)
os(操作系统)
file(文件系统)
net(网络系统)
database(数据库)
Node.js的结构
Node.js标准库:(即我们使用过程中能直接调用的API,在源码中的lib目录下可以看到)
Node bindings:(这一层是JavaScript与底层C/C++能够沟通的关键,前者通过bindings调用后者,相互交换数据)
支撑Node.js运行的基础构件:由C/C++实现的,其中包括4大部分:
V8 Google推出的JavaScript VM,也是Node.js用JavaScript的关键,为JavaScript提供了在非浏览器端运行的环境,是Nodejs之所以高效的原因之一。
libuv 为Nodejs提供了跨平台、线程池、事件池、异步I/O等能力,是Nodejs如此强大的关键
C-ares 提供了异步处理DNS相关的能力
http_parse OpenSSL zlib等 提供了包括HTTP解析、SSL、数据压缩等能力
JavaScript = ECMAScript + DOM + BOM。
现在就可以知道了,前端的JavaScript其实是由ECMAScript、DOM、BOM组合而成。
JavaScript:
ECMAScript(语言基础,如:语法、数据类型结构以及一些内置对象);描述了该语言的语法和基本对象;
文档对象模型DOM(基于ECMASCRIPT,一些操作页面元素的方法);描述处理网页内容的方法和接口;
浏览器对象模型BOM(基于ECMASCRIPT,一些操作浏览器的方法);描述与浏览器进行交互的方法和接口;
node.js是什么?node.js是一个Javascript运行环境(runtime)。Node.js与JavaScript的区别是什么?
本质:Javascript是一种web前端语言,主要用于web开发中,由浏览器解析执行;Node.js是一个可以快速构建网络服务及应用的平台,是用Javascript语言构建的服务平台,可用于后端建立服务器
区别:
Javascript 主要应用前端,是编程语言,客户端编程语言(需要浏览器的javascript解释器进行解释执行);
node.js主要应用后端 ,1个平台,运行环境(一个基于Chrome JavaScript运行时建立的平台,它是对Google V8引擎进行了封装的运行环境)简单的说node.js就是把浏览器的解释器封装起来作为服务器运行平台,用类似javascript的结构语法进行编程,在node.js上运行。
简单的说node.js就是把浏览器的解释器封装起来作为服务器运行平台,用类似javascript的结构语法进行编程,在node.js上运行。
很容易看出,前端和后端的js相同点就是,他们的语言基础都是ECMAScript;
只是他们所扩展的东西不同:
前端需要操作页面元素,于是扩展了DOM,也需要操作浏览器,于是就扩展了BOM。而服务端的js则也是基于ECMAScript扩展出了服务端所需要的一些API,稍微了解后台的童鞋肯定知道;
后台语音有操作系统的能力,于是扩展os,需要有操作文件的能力,于是扩展出file文件系统、需要操作网络,于是扩展出net网络系统,需要操作数据,于是要扩展出database的能力。
这么一对比,相信很多小伙伴对nodejs更加了解了,原来前端和服务端的js如此相似,他们的基础是相同的,只是环境不同,导致他们扩展出来的东西不同而已。
nodejs和JS在底层都是一样的,都是ecmascript,但是扩展出来的功能却是不一样的。一个是偏向于偏向于后端,一个是前端浏览器。
在ecmascript部分node和JS其实是一样的,比如与数据类型的定义、语法结构,内置对象。但在js中的顶层对象是window对象,但是在node中没有什么window对象,node中的顶层对象是global对象。这就是二者的差异性。
在window对象中,定义一个全局变量是可以通过Window来访问的,但是在node中是不能通过global对象来访问的,如:
var a=100;
console.log(global.a);
这种方式是输出结果为undefined
对于上面这个例子,因为在node中定义的变量是模块中的对象,而并不是global全局变量,所以结果为undefined