node.js是由chrome浏览器v8引擎c++编写的,本质是js的运行环境
特点:(1)可以解析JS代码(没有浏览器安全级的限制)
(2)提供系统级别的API:
1、文件的读写
2、进程的管理
3、网络的通信
学习网站
node.org
npm
github
stackoverflow
一、node.js的版本
偶数位为稳定版 奇数为非稳定版本
-0.6x -0.7x
-0.8x -0.9x
...
二、安装node
三、模块:定义、标识、引用 从Commonjs
模块分类:
(1)核心模块 http fs path...
(2)文件模块 var util = require("/.util.js")
(3)第三方模块 var promise = require("bluebird")
模块的流程
(1)创建模块 teacher.js
(2)导出模块 exports.add = function(){}
(3)加载模块 var teacher = require('./teacher.js')
(4)使用模块 teacher.add('Scott');
CommonJS模块规范和ES6模块规范
module.exports与exports、export与export default之间的关系和区别
每一个node.js执行文件,都自动创建一个module对象,同时,module对象会创建一个叫exports的属性,初始化的值是{}
module.exports = {};
exports引用的是module.exports的值,module.exports被改变的时候,exports不会被改变,例如:
1、foo.js
exports.a = function(){
console.log('a');
}
module.exports = {a:2}
exports.a =1
test.js
var x = require('./foo');
console.log(x.a)
result: 2
exports在module.exports被改变后,失效
2、只有静态方法的时候,才能够被调用,prototype创建的方法,则属于函数的私有方法
例:
foo.js
function View(){
}
View.prototype.test = function(){
console.log('test');
}
View.test1 = function(){
console.log('test1');
}
module.exports = View
test.js
var x = require('./foo');
console.log(x) // { [Function:View] test1:[Function] }
console.log(x.test) //undefined
console.log(x.test1) //[Function]
x.test1() //test1
扩展 js中何为静态方法、对象方法、实例方法
function Fn(){
this.hello = function(){
console.log('实例方法');
}
}
Fn.hello = function(){
console.log('静态方法');
}
Fn.prototype.hello = function(){
console.log('实例共享方法(对象方法)')
}
四、node.js API
url
url.parse():将url字符串转换为url对象
url.format():将url对象格式化为url 字符串
url.resolve():用于解析,接受两个参数,拼接
queryString
1.query.stringify({url,from:参数},'&','=')第二个参数表示url中的参数通过什么字符连接,第三个参数表示url中的参数值是通过什么字符赋值,上面为默认值 2.同理query.parse('数据','&','=')做传化成url的时候,用处与上面一样;
http
浏览器后计算机 访问一个 地址的大概操作步骤
1. 浏览器(如Chrome)搜索自身的DNS 缓存
2. 搜索操作系统自身的DNS缓存(浏览器没有找到缓存或缓存已经失效)
3. 读取本地的 HOST 文件
4. 浏览器 发起一个DNS 的 一个系统调用
5. 浏览器获得域名对应的 IP 地址后,发起 HTTP 的“三次握手?”
6. TCP/IP 连接建立起来后,浏览器就可以向服务器发送 HTTP 请求了,例如使用 HTTP 的 GET 方法请求一个根域里的一个域名,协议可以采用 HTTP 1.0 的一个协议。
五、Promise