Node中的三大模塊

一、全局模塊(全局對象)

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 爲 undifineddata 默認是二進制數據
(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、使用

  1. 在Node中,模塊有:具名的核心模塊、用戶自己編寫的文件模塊(相對路徑必須加 './ '),後綴名 '.js' 可以省略;'./' 不可以省略,否則報錯
// ***00.js***
require('./01');
// ***01.js***
console.log("我是01");

在終端執行 node 00.js,終端打印 我是01

  1. 在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.jsconsole.log(foo); 中打印出 0001.jsconsole.log(add(1,2)); 語句報錯

  1. require() 是一個方法,汽油兩個作用。作用一是加載模塊並執行裏面的代碼;作用二是拿到被加載文件模塊導出的接口對象
  2. 模塊默認是封閉的。那麼進行自定義模塊之間的通信就要用到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;
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章