在我們寫 API 時,並不是所有的資源都要寫在同一個檔案裡面,開發時如果都把所有東西寫在一起會導致後面維護的不易,畢竟全部塞在一起程式碼一定會很長,出什麼問題就要一行一行找,十分痛苦,因此今天要來分享的是如何利用 Express 提供的方法,Router(),把需要的東西分類寫在不同的檔案中,需要時再合併,來達成我們要的目的。
在原先專案創立新的 JS 檔,我這邊是叫做 routerStarsign.js
。
在 routerStarsign.js
中導入和建立需要的東西。
const express = require('express');
const router = express.Router();
router
填寫 get(),並且輸出出去。router.get('/', (req, res) => {
res.send('My star sign is Cancer');
});
module.exports = router;
main.js
裡面引進 routerStarsign.js
的 router
,並且使用 app.use() 串接起來。const routerStarsign = require('./routerStarsign');
app.use('/starsign', routerStarsign);
/starsign
即可看到內容。以上我們利用了 Express 中的 Router(),成功的把設置在其他 JS 檔中的東西連接過來,而其中的 app.use() 需要特別講解。他其中一個功用是連接其他的中介軟體,而裡面要填的參數有兩個,一個是路徑,另一個是引進的變數,其中路徑的部分是重點,這裡面填的路徑會是你引進變數的起始路徑。以下附程式碼講解:
//routerStarsign.js
router.get('/', (req, res) => {
res.send('My star sign is Cancer');
});
//main.js
app.use('/starsign', routerStarsign);
//router 全部結果會顯示在 http://localhost:3000/starsign
假如 app.use() 中填的路徑為 /starsign
,本身 get() 填的路徑為起始路徑,則全部用 router 寫的方法都會是顯示在 http://localhost:3000/starsign
這個路徑上,而非 http://localhost:3000/
上。
//routerStarsign.js
router.get('/starsign', (req, res) => {
res.send('My star sign is Cancer');
});
//main.js
app.use('/', routerStarsign);
//只有這個 get() 的結果會顯示在 http://localhost:3000/starsign
假如 app.use() 中填的路徑為起始路徑,本身 get() 填的是 /starsign
,則只有這個 get() 的結果會顯示在 http://localhost:3000/starsign
這個路徑上,其他都是在 http://localhost:3000/
上。
//routerStarsign.js
router.get('/cancer', (req, res) => {
res.send('My star sign is Cancer');
});
//main.js
app.use('/starsign', routerStarsign);
//只有這個 get() 的結果會顯示在 http://localhost:3000/starsign/cancer,其他用 router 寫的會顯示在 http://localhost:3000/starsign
假如 app.use() 中填的路徑為 /starsign
,本身 get() 填的是 /cancer
,則只有這個 get() 的結果會顯示在 http://localhost:3000/starsign/cancer
這個路徑上,其他用 router 寫的會顯示在 http://localhost:3000/starsign
上。
以上舉例可知,app.use() 填的路徑會是引進變數的起始路徑,無論使用哪種 HTTP Method,只要有填寫其他路徑,都是在 app.use() 填寫的路徑上疊加上去。