您好,登錄后才能下訂單哦!
怎樣使用Nodejs創建訪問日志記錄的中間件,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
中間件-訪問日志
目標
利用中間件技術,寫一個用來記錄訪問日志的中間件
中間件
middleware, 中間件是一個特殊的url地址處理函數,它被當作 app.use(中間件函數)
的參數或者是某個路由處理函數中使用。
中間件是 express 的最大特色,也是最重要的一個設計。Express是一個自身功能極簡,完全是路由和中間件構成一個web開發框架:從本質上來說,一個Express應用就是在調用各種中間件。
【推薦學習:《nodejs 教程》】
一個 express 應用,就是由許許多多的中間件來完成的。
中間件的基本使用
// 具名函數格式: const handler1 = (req, res, next) => { console.log(Date.now()); next(); } app.use(handler1);
// 匿名函數格式: app.use((req, res, next) => { console.log(Date.now()); next(); });
說明:中間件函數中有三個基本參數, req、res、next
req 就是請求相關的對象,它和下一個中間件函數中的req對象是一個對象
res 就是響應相關的對象,它和下一個中間件函數中的res對象是一個對象
next 它是一個函數,調用它將會跳出當前的中間件函數,執行后續中間件;如果不調用next,也不執行res.end,則整個請求都會在當前中間件卡住。
思路
應用中間件技術,將每條請求都記錄下來
建立一個.json
的文件用來存儲記錄
將數據讀取后放入 .json
文件
js實現代碼
const express = require("express"); const app = express(); const fs = require("fs"); // 獲取ip的函數 function getClientIp(req) { return ( req.headers["x-forwarded-for"] || req.connection.remoteAddress || req.socket.remoteAddress || req.connection.socket.remoteAddress ); } // 中間件 app.use((req, res, next) => { console.log("時間", new Date()); console.log("訪問地址", req.url); console.log("f訪問ip", getClientIp(req)); /** * 建立一個.json的文件 [] * 獲取文件內容'[]'==>[] * let obj = {time:xxx,url:xxx,ip:xxx} * [].push(obj) * [].push(obj)覆蓋寫入.json的文件 */ fs.readFile("hhhh.json", "utf8", (err, data) => { if (err) { console.log("文件讀取錯誤", err); return; } let arr = JSON.parse(data); //console.log(arr); let obj = {}; obj.time = new Date(); obj.url = req.url; obj.ip = getClientIp(req); arr.push(obj); console.log(arr); let newArr = JSON.stringify(arr); fs.writeFile("hhhh.json", newArr, (err) => { if (err) { console.log("寫入錯誤", err); } }); }); next(); }); // 監聽接口 app.listen(8080, () => { console.log("成功,接口是8080"); });
控制臺截圖
看完上述內容,你們掌握怎樣使用Nodejs創建訪問日志記錄的中間件的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。