1. 程式人生 > >Nodejs的http、url模組

Nodejs的http、url模組

一、http模組

1、http模組簡介

http模組是Node提供的一個系統模組,使用該模組可以讓我們根據自己的需求建立一個web伺服器並定製伺服器功能。

2、構建web伺服器步驟

① 載入http模組

const  http = require('http');

② 建立伺服器例項

const server = http.createServer();

③ 開啟伺服器
引數一:監聽的埠號,0——65535
引數二:啟動成功後觸發的回撥函式

server.listen(3000, function () {
	console.log('Server is running');
})

前三步都是固定的套路,記住就行了。
④ 註冊伺服器功能
引數一:事件型別,request代表監聽瀏覽器請求
引數二:回撥函式。引數一:請求物件;引數二:響應對像

server.on('request', function (req, res) {
	//end能夠將引數內容返回給瀏覽器
	res.end('Hello Nodejs');
})

3、不同的url地址響應不同的內容

req.url內部儲存了當前請求的url地址,該地址是一個沒有域名的路徑,判斷url地址,通過不同的url地址來響應不同的內容。

const  http = require('http');
const server = http.createServer();
server.listen(3000, function () {
	console.log('Server is running');
})
server.on('request', function (req, res) {
	const url = req.url;
	if(url === '/' || url === '/index') {
		res.setHeader('content-type', 'text/html;charset=utf-8');
		res.end('前臺首頁');
	} else if (url === '/admin/login') {
		res.writeHeader(200, {
			'content-type': 'text/html;charset=utf-8'
		})
		res.write('後臺登入頁');
		res.end();
	} else {
		res.writeHeader(404);
		res.end('404 not found');
	}
})

每次程式碼改變就要重啟伺服器(Ctrl+shift+c)

4、req物件

① req.url:儲存了當前請求的url地址
② req.method:儲存了當前請求的方法
③ req.headers:儲存了當前請求頭的資訊

5、res物件

① res.setHeader():設定響應頭
② res.writeHeader():設定響應狀態碼和響應頭,物件形式一次性可以設定多個響應頭
③ res.write():設定響應主體
④ res.end():將響應行、響應頭、響應體一次性返回給瀏覽器

6、http配合fs顯示頁面

//載入http模組
const  http = require('http');
const	fs = require('fs');
//建立伺服器例項
const server = http.createServer();
//開啟伺服器
server.listen(3000, function () {
	console.log('Server is running');
})
//註冊伺服器事件
server.on('request', function (req, res) {
	const url = req.url;
	//在view資料夾中新建了前臺首頁index.html,在view中新建了資料夾admin,在admin中新建了後臺登入頁面login.html
	if(url === '/' || url === '/index') {
		fs.readFile('./view/index.html', function (err,data) {
			if (err) {
				res.end('404 not found');
				return console.log(err);
			}
			res.end(data);
		});
	} else if (url === '/admin/login') {
		fs.readFile('./view/admin/login.html', function (err, data) {
			if (err) {
				res.end('404 not fount');
			}
			res.end(data);
		});
	} else {
		res.writeHeader(404);
		res.end('404 not found');
	}
})

7、載入靜態資源

分析url地址和要讀取檔案路徑的關係

const  http = require('http');
const  fs = require('fs');
const server = http.createServer();
server.listen(3000, function () {
	console.log('Server is running');
})
server.on('request', function (req, res) {
	const url = req.url;
	if(url === '/' || url === '/index') {
		fs.readFile('./view/index.html', function (err,data) {
			if (err) {
				res.end('404 not found');
				return console.log(err);
			}
			res.end(data);
		});
	} else if (url === '/admin/login') {
		fs.readFile('./view/admin/login.html', function (err, data) {
			if (err) {
				res.end('404 not fount');
			}
			res.end(data);
		});
		//在view中建立了public資料夾,裡面又分別建立了css、img、js三個資料夾,裡面分別有a.css,1.png,b.js,這些都是要載入的靜態資源
		//為了載入靜態資源,多加的一個分支
	} else if (url.startsWith('/public')) {
		fs.readFile('./view' + url, function (err,data) {
			if (err) {
				res.end('404 not found');
				return console.log(err);
			}
			res.end(data);
		});
	} else {
		res.writeHeader(404);
		res.end('404 not found');
	}
})

二、url模組

1、url模組簡介

url也是node提供的系統模組,使用該模組能夠將get地址分解,並提取出其中的引數。
get地址: /getData?id=10001&name=zs
核心方法: parse(var1, var2);
引數1: url地址
引數2: true(get引數轉為物件) 、 false(get引數就是一個字串)

兩個屬性最重要:
pathname:當前請求的地址
query: get傳遞的引數

//1. 載入 http 模組
const http = require('http');
const url = require('url');
//2. 建立伺服器例項
const server = http.createServer();
//3. 啟動伺服器
server.listen(3000, () => {
    console.log('Server is running');
})
server.on('request', (req, res) => {
    const urlObj = url.parse(req.url, true);
    console.log(urlObj);
})