今天會延續之前有提到的中介軟體,一樣有三個重點:
1.理解中介軟體的概念
2.使用內建與第三方中介軟體
3.錯誤處理與自定義錯誤中介軟體
中介軟體(Middleware) 是 Express 中的一個核心概念,它是執行請求-響應循環中的一個函數。中介軟體函數可以訪問請求對象(req)、響應對象(res)和應用的下一個中介軟體函數(next)。
app.use((req, res, next) => {
console.log('This is a middleware');
next(); // 調用 next() 讓請求繼續前往下一個中介軟體或路由
});
中介軟體主要分為以下幾種類型:
Express 提供了一些內建中介軟體來簡化常見任務的處理,如解析 JSON 請求和 URL 編碼數據。
使用 express.json() 來解析 JSON 請求:
app.use(express.json()); // 解析應用程序中的 JSON 數據
使用 express.urlencoded() 來處理 URL 編碼的請求數據:
app.use(express.urlencoded({ extended: true })); // 解析表單提交的數據
還可以使用許多第三方中介軟體來添加特定功能。
使用 cors 來處理跨域請求:
npm install cors
const cors = require('cors');
app.use(cors()); // 允許所有來源的跨域請求
使用 morgan 來記錄請求日誌:
npm install morgan
const morgan = require('morgan');
app.use(morgan('dev')); // 使用 'dev' 格式來顯示簡潔的日誌
除了使用內建和第三方中介軟體,你還可以編寫自己的中介軟體來執行特定的業務邏輯。
範例:
app.use((req, res, next) => {
req.requestTime = Date.now();
console.log(`Request received at: ${req.requestTime}`);
next(); // 確保繼續執行下一個中介軟體
});
這段中介軟體會在每個請求中記錄請求的時間,並將 requestTime 屬性附加到 req 對象上。
為了統一處理應用中的錯誤,你可以定義一個全局的錯誤處理中介軟體。
範例:
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({ message: 'Something went wrong!', error: err.message });
});
這段代碼會捕捉應用中的所有錯誤,記錄錯誤堆疊信息,並返回一個標準的錯誤響應。
app.get('/error-test', (req, res, next) => {
const error = new Error('This is a test error');
next(error); // 傳遞錯誤到錯誤處理中介軟體
});