基础知识补充
CMD基本知识
命令行窗口(小黑屏)、CMD窗口、终端、shell
开始菜单 --> 运行 --> CMD --> 回车
Win + R --> CMD --> 回车
命令 | 功能 |
---|---|
dir | 列出当前目录下的所有文件 |
cd 目录名 | 进入到指定的目录 |
md 目录名 | 创建一个文件夹 |
rd 目录名 | 删除一个文件夹 |
目录
.
表示当前目录
..
表示上一级目录
环境变量(window系统中的变量 )
PATH :C:\Program Files\Microsoft SQL Server\130\Tools\Binn\
当我们在命令行窗口打开一个文件,或调用一个程序时,系统会首先在当前目录下寻找文件程序,如果找到了则直接打开
如果没有找到则会依次到环境变量path的路径中寻找,直到找到为止如果没找到则报错类似于作用域链
所以我们可以将一些经常需要访问的程序和文件的路径添加到path中,这样我们就可以在任意位置来访问这些文件和程序了
进程和线程
进程: 进程负责为程序的运行提供必备的环境
进程就相当于工厂中的车间
线程: 线程是计算机中最小的计算单位,线程负责执行进程中的程序
线程就相当于工厂中的工人
**单线程:**JS是单线程,在执行JS代码的时候网页是停止渲染的。
**多线程:**主流的语言,如Java
Node.js 概念
Node.js是一个能够在服务器端运行JavaScript的开放源代码、跨平台JavaScript运行环境。
Node采用Google开发的V8引擎运行js代码,使用事件驱动、非阻塞和异步I/O模型等技术来提高性能,可优化应用程序的传输量和规模。
Node大部分基本模块都用JavaScript编写。在Node出现之前,JS通常作为客户端程序设计语言使用,以JS写出的程序常在用户的浏览器上运行。
目前,Node已被IBM、Microsoft、Yahoo!、Walmart、Groupon、SAP、 LinkedIn、Rakuten、PayPal、VoxerGoDaddy等企业采用。
Node主要用于编写像Web服务器一样的网络应用,这和PHP和Python是类似的。但是Node与其他语言最大的不同之处在于,PHP等语言是阻塞的而Node是非阻塞的。
Node是事件驱动的。开发者可以在不使用线程的情况下开发出一个能够承载高并发的服务器。其他服务器端语言难以开发高并发应用,而且即使开发出来,性能也不尽人意,Node正是在这个前提下被创造出来。
Node把JS的易学易用和Unix网络编程的强大结合到了一起。
Node.js允许通过JS和一系列模块来编写服务器端应用和网络相关的应用。
核心模块包括文件系统I/O、网络(HTTP、TCP、UDP、DNS、TLS/SSL等)、二进制数据流、加密算法、数据流等等。Node模块的API形式简单,降低了编程的复杂度。
使用框架可以加速开发。常用的框架有Express.js、Socket.IO和Connect等。Node.js的程序可以在Microsoft Windows、Linux、Unix、Mac OS X等服务器上运行。
Node.js也可以使用CoffeeScript、TypeScript、Dart语言,以及其他能够编译成JavaScript的语言编程。
Node的用途
• Web服务API,比如REST
• 实时多人游戏
• 后端的Web服务,例如跨域、服务器端的请求
• 基于Web的应用
• 多客户端的通信,如即时通信
I/O (Input/Output)
I/O操作指的是对磁盘的读写操作
Node语言是JS模型
Node是对ES标准一个实现,Node也是一个JS引擎,通过Node可以使js代码在服务器端执行
Node仅仅对ES标准进行了实现,所以在Node中不包含DOM 和 BOM
Node编写都是单线程的服务器
Node处理请求时是单线程,但是在后台拥有一个I/O线程池
Node中使用的内建对象
String Number Boolean Math Date RegExp Function Object Array
BOM
,DOM
不能使用,但是可以使用 console
也可以使用定时器setTimeout() setInterval()
ECMAScript标准的缺陷
没有模块系统,标准库较少,没有标准接口,缺乏管理系统
模块化(require)
如果程序设计的规模达到了一定程度,则必须对其进行模块化。
模块化可以有多种形式,但至少应该提供能够将代码分割为多个源文件的机制。
CommonJS 的模块功能可以帮我们解决该问题。
CommonJS规范的提出,主要是为了弥补当前JavaScript没有模块化标准的缺陷。
CommonJS规范为JS指定了一个美好的愿景,希望JS能够在任何地方运行。
CommonJS对模块的定义十分简单: – 模块引用 – 模块定义 – 模块标识
模块标识
模块标识其实就是模块的名字,也就是传递给require()方法的参数,它必须是符合驼峰命名法的字符串,或者是以.、…开头的相对路径、或者绝对路径。
模块的定义十分简单,接口也十分简洁。每个模块具有独立的空间,它们互不干扰,在引用时也显得干净利落。
核心模块
由node引擎提供的模块,核心模块的标识就是,模块的名字,里面封装着内置方法
var fs = require("fs");
文件模块
由用户自己创建的模块,文件模块的标识就是文件的路径(绝对路径,相对路径)
相对路径使用.或…开头
模块定义
在运行环境中,提供了exports对象用于导出当前模块的方法或者变量,并且它是唯一的导出的出口。
在模块中还存在一个module对象,它代表模块自身,而exports是module的属性。
在Node中一个文件就是一个模块。
模块引用
在规范中,定义了require()方法,这个方法接手模块标识,以此将一个模块引入到当前运行环境中。
模块引用的示例代码:require('模块').math
模块实例
Node中虽然使用的是CommonJS规范,但是其自身也对规范做了一些取舍。
在Node中引入模块,需要经历3个步骤 – 路径分析 – 文件定位 – 编译执行
在Node中,模块分为三类:一类是底层由C++编写的内建模块,一类是Node提供的核心模块;还有一类是用户编写的模块,称为文件模块。
// 扩展模块
var math = require("./math");
// 核心模块
var fs = require("fs");
console.log(math.add(123,456));
console.log(fs);
我们可以通过 exports 来向外部暴露变量和方法只需要将需要暴露给外部的变量或方法设置为exports的属性即可
//向外部暴露属性或方法
exports.x = "我是02.module.js中的x";
exports.y = "我是y";
exports.fn = function () {
};
全局对象(global)
在全局中创建的变量和函数都会作为global的属性和方法保存
实际上模块中的代码都是包装在一个函数中执行的,并且在函数执行时,同时传递进了5个实参
// 当node在执行模块中的代码时,它会首先在代码的最顶部,添加如下代码
function (exports, require, module, __filename, __dirname) {
exports = module.exports
// ....
} // 在代码的最底部,添加}代码
- **exports:**该对象用来将变量或函数暴露到外部
- **require:**函数,用来引入外部的模块
- **module:**代表的是当前模块本身
- **__filename:**当前模块的完整路径
C:\Users\lilichao\WebstormProjects\class0705\01.node\04.module.js
- **__dirname:**当前模块所在文件夹的完整路径
当前模块所在文件夹的完整路径
console.log(global.a);
console.log(arguments.callee + "");//- 这个属性保存的是当前执行的函数对象
console.log(arguments.length);
console.log(exports);
console.log(module.exports == exports);
console.log(__dirname);
exports 和 module.exports
通过exports只能使用.的方式来向外暴露内部变量
exports.xxx = xxx
而module.exports既可以通过.的形式,也可以直接赋值
module.exports.xxx = xxxx
module.exports = {}
这样有个好处,就是引入的时候可以直接使用返回的exports值,不用通过.xxx获取
// 模块一定义
module.exports = {
}
// 模块二引入
var demo = require("模块一"); //demo = {}
模块包(package)
CommonJS的包规范允许我们将一组相关的模块组合到一起,形成一组完整的工具。
CommonJS的包规范由包结构和包描述文件两个部分组成。
引入包和使用包
var math = require('math')
console.log(math.add(123,456))
包结构: 组织包中的各种文件,实际上就是一个压缩文件,解压以后还原为目录。符合规范的目录,应该包含如下文件:
– package.json 描述文件 – bin 可执行二进制文件 – lib js代码 – doc 文档 – test 单元测试
包描述文件: 描述包的相关信息,用于表达非代码相关的信息,它是一个JSON格式的文件 – package.json,位于包的根目录下,是包的重要组成部分。
package.json中的字段:name、description、version、ke