写在前面
早就听说node.js强大,虽然一直在用node的npm工具,但无奈一直没有写脚本
今天有时间看一看,哇,这个node脚本 它又短又强悍,哦呦,不对哦,这和python脚本差不多嘛
这段python脚本用的pymysql(另SQLAlchemy的语法看起来类似javaJpa吧),过程上类似,建立查询,执行sql语句
好了,接下来进入正题
1、Node.js 概述
- Node.js 是一个能够在服务器端运行 JavaScript 的开放源代码、跨平台 JavaScript 运行环境。
- Node.js 由 Node.js 基金会持有和维护,并与 Linux 基金会有合作关系。
- Node.js 采用 Google 开发的 V8 运行代码,使用事件驱动、非阻塞和异步输入输出模型等技术来提高性能,可优化应用程序的传输量和规模。这些技术通常用于数据密集的即时应用程序。
- Node.js 大部分基本模块都用 JavaScript 语言编写。
- 在 Node.js 出现之前,JavaScript 通常作为客户端程序设计语言使用,以JavaScript 写出的程序常在用户的浏览器上运行。Node.js 的出现使 JavaScript 也能用于服务端编程。
- Node.js 含有一系列内置模块,使得程序可以脱离 Apache HTTP Server 或 IIS,作为独立服务器运行。
2、Node.js 特点
- 它是一个 JavaScript 运行环境。
- 依赖于 Chrome V8 引擎进行代码解释。
- 事件驱动:在 Node 中,客户端请求建立连接,提交数据等行为,会触发相应的事件。在 Node 中,在一个时刻,只能执行一个事件回调函数,但是在执行一个事件回调函数的中途,可以转而处理其他事件,然后返回继续执行原事件的回调函数。
- 非阻塞 I/O:Node.js 中采用了非阻塞型 I/O 机制,在执行了访问数据库的代码之后,将立即转而执行其后面的代码,把数据库返回结果的处理代码放在回调函数中,从而提高了程序的执行效率。
- 轻量可伸缩,适用于实时数据交互应用。
- 单线程:好处是减少内存开销,不用像多线程编程那样处处在意状态同步的问题。缺点是错误会引起整个应用退出。
3、Node.js 适用场景
我们从 Node.js 的特点中可以知道 Node.js 擅长处理 I/O,不善于计算(单线程的缺点),因此 Node.js 适用于:
- 当应用程序需要处理大量并发的 I/O,而在向客户端发出响应之前,应用程序内部并不需要进行非常复杂的处理的时候,
- Node.js 也非常适合与 web socket 配合,开发长连接的实时交互应用程序。比如:聊天室,博客系统,考试系统等。
3.1、cmd查看系统中 Node.js 版本:
node -v
3.2、node安装:
4、NPM 介绍
NPM 是随同 Node.js 一起安装的包管理工具。因此当我们安装好 Node.js 的时候,也安装好了 NPM。
NPM 是一个命令行工具,用于从 NPM Registry 中下载、安装 Node.js 程序,同时解决依赖问题。
cmd查看系统中 NPM 版本:
npm -v
5、Node.js REPL(交互式解释器)
Node.js REPL(Read Eval Print Loop:交互式解释器) 表示一个电脑的环境,类似 Window 系统的终端或 Unix/Linux shell,我们可以在终端中输入命令,并接收系统的响应。
Node 自带了交互式解释器,可以执行以下任务:
- 读取 - 读取用户输入,解析输入了Javascript 数据结构并存储在内存中。
- 执行 - 执行输入的数据结构
- 打印 - 输出结果
- 循环 - 循环操作以上步骤直到用户两次按下 ctrl-c 按钮退出。
Node 的交互式解释器可以很好的调试 Javascript 代码。
5.1、REPL 常用命令
- Ctrl + C - 退出当前终端
- Ctrl + C - 连续按两次退出 Node REPL
- Ctrl + D - 退出 Node REPL
- 向上/向下 键 - 查看输入的历史命令
- tab 键 - 列出当前命令
- help - 列出使用命令
- break - 退出多行表达式
- clear - 退出多行表达式
- save filename - 保存当前的 Node REPL 会话到指定文件
- load filename - 载入当前 Node REPL 会话的文件内容。
5.2、启动 Node 终端
输入以下命令来启动 Node 终端:
node
5.3、简单的表达式运算
$ node
> 1 +4
5
> 5 / 2
2.5
> 3 * 6
18
> 4 - 1
3
> 1 + ( 2 * 3 ) - 4
3
>
5.4、使用变量
可以将数据存储在变量中,并在需要的时候使用它。
变量声明需要使用 var 关键字,如果没有使用 var 关键字变量会直接打印出来。
使用 var 关键字的变量可以使用 console.log() 来输出变量。
$ node
> x = 10
10
> var y = 10
undefined
> x + y
20
> console.log("Hello zxyaily")
Hello zxyaily
undefined
> console.log("www.zxyaily.top")
www.zxyaily.top
undefined
5.5、多行表达式
> for(var i=0;i<10;i++){
... console.log("mrZ ❤ missL");
... }
mrZ ❤ missL
mrZ ❤ missL
mrZ ❤ missL
mrZ ❤ missL
mrZ ❤ missL
mrZ ❤ missL
mrZ ❤ missL
mrZ ❤ missL
mrZ ❤ missL
mrZ ❤ missL
undefined
>
5.6、下划线变量
可以使用下划线(_)获取上一个表达式的运算结果:
$ node
> var x = 10
undefined
> var y = 20
undefined
> x + y
30
> var sum = _
undefined
> console.log(sum)
30
undefined
>
6、Node.js 全局对象
在 JavaScript 中全局对象通常是 window,而在 Node.js 中全局对象是 globa,
所有全局变量(除了 global 本身以外)都是 global 对象的属性,我们可以直接访问到 global 的属性。
6.1、全局变量
global 最根本的作用是作为全局变量的宿主。按照 ECMAScript 的定义,满足以下条 件的变量是全局变量:
- 在最外层定义的变量;
- 全局对象的属性;
- 隐式定义的变量(未定义直接赋值的变量)。
定义一个全局变量的时候,这个变量同时也会成为全局对象的属性,反之亦然。在 Node.js 中不可能在最外层定义变量,因为所有用户代码都是属于当前模块的,而模块本身不是最外层上下文。定义变量一定要使用 var 关键字,因为全局变量会污染命名空间。
详情见此例 https://wikipedia.tw.wjbk.site/wiki/Node.js
6.2、常用的全局变量和全局函数
__filename
表示当前正在执行的脚本的文件名。它将输出文件所在位置的绝对路径,且和命令行参数所指定的文件名不一定相同。
如果在模块中,返回的值是模块文件的路径。比如创建一个叫 hello.js 的文件,输入以下代码:
console.log(__filename);
运行效果
/home/project/hello.js
__dirname
表示当前执行脚本所在的目录。比如创建一个 hello.js 的文件,输入以下代码:
console.log(__filename);
运行效果
/home/project
setTimeout(cb, ms)
全局函数在指定的毫秒(ms)数后执行指定函数(cb),只执行一次函数。比如创建一个 hello.js 的文件,输入以下代码:
function hello(){
console.log( "Hello, syl!");
}
// 三秒后执行以上函数
setTimeout(hello, 3000);
clearTimeout(t)
用于停止一个之前通过 setTimeout() 创建的定时器。 参数 t 是通过 setTimeout() 函数创建的定时器。比如清除上面案例的定时器:
function hello(){
console.log( "Hello, syl!");
}
// 三秒后执行以上函数
var t = setTimeout(hello, 3000);
// 清除定时器
clearTimeout(t);
setInterval(cb, ms)
与 setTimeout(cb, ms) 类似,不同的是这个方法会不停的执行函数。直到 clearInterval() 被调用或窗口被关闭,也可以按 Ctrl+C 停止。比如创建一个 hello.js 的文件,输入以下代码:
function hello(){
console.log( "Hello, syl!");
}
// 三秒后执行以上函数
var t = setInterval(hello, 3000);
console.log()
全局函数用于进行标准输出流的输出,即在控制台中显示一行字符串,和 JavaScript 中的使用一样。
console 用于提供控制台标准输出,它是由 Internet Explorer 的 JScript 引擎提供的调试工具,后来逐渐成为浏览器的实施标准。Node.js 沿用了这个标准,提供与习惯行为一致的 console 对象,用于向标准输出流(stdout)或标准错误流(stderr)输出字符。
详情见console.log篇