一、全局模塊(全局對象)
1、定義
何時何地都可以訪問,不需要引用
2、全局對象和全局變量
什麼是全局變量
:
- 在最外層定義的變量;
- 全局對象的屬性;
- 隱式定義的變量(未定義直接賦值的變量)
注意:
- 在Node.js 中你不可能在最外層定義變量,因爲所有用戶代碼都是屬於當前模塊的
(模塊作用域)
, 而模塊本身不是最外層上下文
。 - 永遠
使用var 定義變量
以避免引入全局變量,因爲全局變量會污染命名空間,提高代碼的耦合風險。
3、process
process 是一個全局變量,即 global 對象的屬性。
它用於描述當前Node.js 進程狀態
的對象,提供了一個與操作系統的簡單接口。
(1)process.argv
是命令行參數數組,第一個元素是 node,第二個元素是腳本文件名, 從第三個元素開始每個元素是一個運行參數。
(2)process.stdout
是標準輸出流,通常我們使用的 console.log() 向標準輸出打印 字符,而 process.stdout.write()
函數提供了更底層的接口。
(3)process.stdin
是標準輸入流,初始時它是被暫停的,要想從標準輸入讀取數據, 你必須恢復流,並手動編寫流的事件響應函數。
(4)process.nextTick(callback)
的功能是爲事件循環設置一項任務,Node.js 會在 下次事件循環調響應時調用 callback。
示例一:
console.log(process.argv);
示例二:
var num1 = parseInt(process.argv[2]);
var num2 = parseInt(process.argv[3]);
console.log(process.argv);
console.log(num1+num2);
4、console
(1)console.log 接受若干 個參數
。如果只有一個參數,則輸出這個參數的字符串形式。如果有多個參數,則 以類似於C 語言 printf() 命令的格式輸出。
(2)console.error():
與console.log() 用法相同,只是向標準錯誤流輸出。
(3)console.trace():
向標準錯誤流輸出當前的調用棧。
console.log("我是console.log");
console.log("我是第%d個console.log",2);
二、核心模塊
1、定義
需要
require()
,但不需要單獨下載
require()
1、如果有路徑,就去路徑裏找
2、沒有路徑就去node_modules
裏找
3、以上兩種都不符合就去node安裝目錄
裏面找
2、path
(1)使用 require()
導入核心模塊
(2)path.dirname()
接收一個參數,獲取參數中文件的路徑
(3)path.basename()
接收一個參數,獲取參數中文件名
(4)path.extname()
接收一個參數,獲取參數中文件的後綴名
(5)require.resolve()
接收兩個參數,查詢某個模塊文件的帶有完整絕對路徑的文件名
示例一:
var path = require('path');
console.log(path.dirname('/5html/nodeText/00.html'));
console.log(path.basename('/5html/nodeText/00.html'));
console.log(path.extname('/5html/nodeText/00.html'));
示例二:
var path = require('path');
console.log(path.resolve(__dirname,'00.html'));
3、fs
(1)使用 require()
導入核心模塊
(2)readFile()
中接收兩個參數。第一個參數是讀取文件的路徑,第二個參數是回調函數。回調函數中接收兩個參數,第一個參數是 error對象,讀取成功時error對象 爲 null
,失敗時是錯誤信息;第二個參數是 data 數據,讀取失敗時·data 爲 undifined
,data 默認是二進制數據
。
(3)writeFile()
中接收三個參數。第一個參數是要寫入文件的路徑,第二個參數是寫入的內容,第三個參數是回調函數(同上
)。
(4)writeFile()
是對文件進行重寫
(5)對文件內容進行追加則在writeFile()
中增加一個參數:{flag:'a'}
; 或者使用 appendFile()
示例一:
var fs = require('fs');
fs.readFile('./00.html',function(error,data){
if(error) {
console.log(error);
console.log(data);
}else {
console.log(error);
console.log(data);
console.log(data.toString());
}
})
讀取文件成功:
讀取文件失敗:
示例二:
var fs = require('fs');
var msg = 'hello node';
fs.writeFile('./exam1.txt',msg,function(error) {
if(error)
console.log(error);
})
示例三:
var fs = require('fs');
var msg = 'hello node';
fs.writeFile('./exam1.txt',msg,{flag:'a'},function(error) {
if(error)
console.log(error);
})
示例四:
var fs = require('fs');
var msg = 'hello node';
fs.appendFile('./exam1.txt',msg,function(error) {
if(error)
console.log(error);
})
4、http
(1)在node中專門提供了一個核心模塊:http
。http核心模塊的作用就是創建編寫服務器
(2)服務器作用:提供服務(對數據的服務);發送請求;接收請求;處理請求;發送響應(反饋)
(3)當客戶端發出請求就會自動觸發服務器的request請求事件
,然後執行回調處理函數
(4)回調函數中有兩個參數。依次爲請求對象和響應對象。請求對象可以用來獲取客戶端的一些請求信息
,例如請求路徑。響應對象可以用來給客戶端發送響應信息
(5)response對象中有一個方法:write
,可以用來給客戶端發送響應數據。write 可以使用多次,但是最後一定要使用end來結束響應,否則客戶端會一直等待
(6)終端中打印的 “收到客戶端請求,請求路徑是/favicon.ico” 是瀏覽器默認圖標
示例一:
//1、加載http核心模塊
var http = require('http');
//2、使用http.createServer() 方法船艦一個Web服務器
//返回一個Server實例
var server = http.createServer();
//3、註冊request請求事件
//當客戶端發出請求就會自動觸發服務器的request請求事件,然後執行回調處理函數
/*參數:request response
請求對象可以用來獲取客戶端的一些請求信息,例如請求路徑
響應對象可以用來給客戶端發送響應信息
*/
server.on('request',function(request,response) {
console.log("收到客戶端請求,請求路徑是" + request.url);
//response對象中有一個方法:write,可以用來給客戶端發送響應數據
//write 可以使用多次,但是最後一定要使用end來結束響應,否則客戶端會一直等待
response.write('hello node');
response.end();
})
//4、綁定端口號,啓動服務器
server.listen(8080,function() {
console.log("服務器啓動成功,請訪問http://127.0.0.1:8080");
});
示例二:簡寫版
//1、加載http核心模塊
var http = require('http');
http.createServer(function(request,response) {
console.log("收到客戶端請求,請求路徑是" + request.url);
response.write('hello node');
response.end();
}).listen(8080);
console.log("服務器啓動成功,請訪問http://127.0.0.1:8080");
三、自定義模塊
1、定義
require()
自己封裝的模塊
2、使用
- 在Node中,模塊有:具名的核心模塊、用戶自己編寫的文件模塊
(相對路徑必須加 './ ')
,後綴名'.js' 可以省略;'./' 不可以省略,否則報錯
// ***00.js***
require('./01');
// ***01.js***
console.log("我是01");
在終端執行 node 00.js
,終端打印 我是01
- 在Node中沒有全局作用域,只有模塊作用域。
即外部訪問不到內部,內部訪問不到外部
// ***00.js***
var foo = '00';
function add(num1,num2) {
return num1+num2;
}
require('./01');
console.log(foo);
// ***01.js***
console.log("我是01");
var foo = '01';
console.log(add(1,2));
在終端執行 node 00.js
,console.log(foo); 中打印出 00;01.js中 console.log(add(1,2)); 語句報錯
- require() 是一個方法,汽油兩個作用。作用一是
加載模塊並執行裏面的代碼
;作用二是拿到被加載文件模塊導出的接口對象
模塊默認是封閉的
。那麼進行自定義模塊之間的通信就要用到require()方法加載自定i有模塊,exports導出模塊
。在每個文件模塊中都提供了一個對象:exports 對象
,exports對象默認是一個空對象
;還可以使用module
示例一:
// ***00.js***
var exp = require('./01');
console.log(exp.foo);
console.log(exp.add(2,3));
// ***01.js***
var foo = '01';
function add(num1,num2) {
return num1*num2;
}
// 需要做的是把所有需要被外部訪問的成員變量放在exports對象中
exports.foo = foo;
exports.add = function(num1,num2) {
return num1+num2;
}
在終端執行 node 00.js
示例二:module 中爲若干個變量
// ***00.js***
var exp = require('./01');
console.log(exp.foo);
console.log(exp.add(2,3));
// ***01.js***
var foo = '01';
function add(num1,num2) {
return num1+num2;
}
module.exports = {
foo,add
}
示例三:module 中爲一個對象
// ***00.js***
var exp = require('./03');
var p = new exp("zhangsan");
p.show();
// ***01.js***
module.exports = class {
constructor(name) {
this.name = name;
}
show() {
console.log(this.name);
}
}
示例四:module 中爲一個函數
// ***00.js***
var exp = require('./03');
console.log(exp(1,2));
// ***01.js***
module.exports = function(num1,num2) {
return num1+num2;
}