一、router.get用法
router.get是Express.js框架中定義路由的方法之一,用于定義HTTP GET請(qǐng)求的路由。router.get函數(shù)的語(yǔ)法如下:
router.get(path, callback [, callback ...]);
其中,path參數(shù)是一個(gè)字符串,指定URL路徑,callback參數(shù)是處理請(qǐng)求的回調(diào)函數(shù)。當(dāng)請(qǐng)求路徑與path參數(shù)匹配時(shí),會(huì)執(zhí)行回調(diào)函數(shù)。如果有多個(gè)回調(diào)函數(shù),則按照順序依次執(zhí)行。
舉個(gè)例子,以下代碼定義了一個(gè)基本的路由:
const express = require('express');
const app = express();
// GET路由
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('Example app listening on port 3000!');
});
上面代碼中,當(dāng)客戶端訪問'/'路徑時(shí),會(huì)發(fā)送'Hello World!'給客戶端。
二、router.get用法 Node.js
router.get函數(shù)是Express.js框架中基于Node.js的HTTP模塊實(shí)現(xiàn)的。HTTP模塊是Node.js的核心模塊,用于實(shí)現(xiàn)HTTP服務(wù)器和客戶端。
使用Express.js框架中的router.get函數(shù),開發(fā)者可以更加簡(jiǎn)便地定義HTTP請(qǐng)求路由,無需手動(dòng)編寫HTTP模塊的代碼。
在上面的例子中,我們使用了Express.js框架的get方法,而不是使用Node.js的HTTP模塊的get方法,不過,它們的核心思想是相同的:當(dāng)客戶端向服務(wù)器發(fā)送GET請(qǐng)求時(shí),服務(wù)器會(huì)響應(yīng)客戶端的請(qǐng)求。Express.js框架只是在這個(gè)過程中為開發(fā)者提供了更加便捷的API,讓開發(fā)者可以更加輕松地定義路由。
三、router.get的作用
1、定義路由
router.get函數(shù)的主要作用是用于定義HTTP GET請(qǐng)求的路由。通過使用該函數(shù),開發(fā)者可以輕松地定義路由與回調(diào)函數(shù)的對(duì)應(yīng)關(guān)系,當(dāng)有請(qǐng)求來訪問該路由時(shí),會(huì)自動(dòng)調(diào)用回調(diào)函數(shù)進(jìn)行處理。
下面代碼示例定義了兩個(gè)路由:
const express = require('express');
const app = express();
// GET路由
app.get('/', (req, res) => {
res.send('Hello World!');
});
// GET路由
app.get('/about', (req, res) => {
res.send('About Page');
});
app.listen(3000, () => {
console.log('Example app listening on port 3000!');
});
當(dāng)訪問'/'路徑時(shí),將會(huì)發(fā)送'Hello World!'給客戶端,當(dāng)訪問'/about'路徑時(shí),將會(huì)發(fā)送'About Page'給客戶端。
2、處理URL參數(shù)
在路由中,URL參數(shù)是指由':'開頭的字符串。在回調(diào)函數(shù)中,可以通過req.params來獲取URL參數(shù)的值。
下面代碼示例定義了一個(gè)帶有URL參數(shù)的路由:
const express = require('express');
const app = express();
// GET路由
app.get('/user/:id', (req, res) => {
res.send('User ID: ' + req.params.id);
});
app.listen(3000, () => {
console.log('Example app listening on port 3000!');
});
當(dāng)訪問'/user/123'路徑時(shí),將會(huì)發(fā)送'User ID: 123'給客戶端。
3、處理請(qǐng)求參數(shù)
除了處理URL參數(shù)外,還可以通過req.query獲取GET請(qǐng)求中的查詢參數(shù)。查詢參數(shù)是指問號(hào)'?'后面的字符串。
下面代碼示例定義了一個(gè)帶有查詢參數(shù)的路由:
const express = require('express');
const app = express();
// GET路由
app.get('/user', (req, res) => {
const name = req.query.name;
const age = req.query.age;
res.send('Name: ' + name + ', Age: ' + age);
});
app.listen(3000, () => {
console.log('Example app listening on port 3000!');
});
當(dāng)訪問'/user?name=Tom&age=18'路徑時(shí),將會(huì)發(fā)送'Name: Tom, Age: 18'給客戶端。
4、使用中間件
在路由中,還可以使用中間件函數(shù),對(duì)請(qǐng)求做進(jìn)一步的處理。中間件函數(shù)是路由處理函數(shù)的一種擴(kuò)展,可以增加路由的處理能力。
下面代碼示例定義了一個(gè)帶有中間件的路由:
const express = require('express');
const app = express();
// 中間件函數(shù)
const logger = (req, res, next) => {
console.log('Time:', Date.now());
next();
}
// GET路由
app.get('/', logger, (req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('Example app listening on port 3000!');
});
當(dāng)訪問'/'路徑時(shí),會(huì)首先執(zhí)行l(wèi)ogger中間件函數(shù),輸出當(dāng)前時(shí)間,再執(zhí)行路由回調(diào)函數(shù),將'Hello World!'發(fā)送給客戶端。
5、使用多個(gè)處理函數(shù)
在路由中,還可以使用多個(gè)處理函數(shù),在需要處理多種任務(wù)時(shí)更加靈活。在路由處理函數(shù)中,可以使用next函數(shù)將控制權(quán)交給下一個(gè)處理函數(shù)。
下面代碼示例定義了一個(gè)帶有多個(gè)回調(diào)函數(shù)的路由:
const express = require('express');
const app = express();
// 中間件函數(shù)1
const middleware1 = (req, res, next) => {
console.log('Middleware 1');
next();
}
// 中間件函數(shù)2
const middleware2 = (req, res, next) => {
console.log('Middleware 2');
next();
}
// GET路由
app.get('/',
middleware1,
middleware2,
(req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('Example app listening on port 3000!');
});
當(dāng)訪問'/'路徑時(shí),會(huì)先執(zhí)行middleware1中間件函數(shù),輸出'Middleware 1',再執(zhí)行middleware2中間件函數(shù),輸出'Middleware 2',最后執(zhí)行路由回調(diào)函數(shù),將'Hello World!'發(fā)送給客戶端。