Browse Source

🐞 fix: 修复部分日志无法记录的问题

Pchen. 8 months ago
parent
commit
a4c6693534
1 changed files with 38 additions and 14 deletions
  1. 38 14
      lib/requestLog.js

+ 38 - 14
lib/requestLog.js

@@ -11,25 +11,49 @@ class RequestLog {
 
 
     async insertLog(req, resData, namespace, method, path) {
     async insertLog(req, resData, namespace, method, path) {
         try {
         try {
-            const time = new Date().getTime()
-            const ip = this.getClientIp(req)
-            let ipData = await this.searcher.search(ip)
-            ipData = ipData.region
+            const time = Date.now();
+            const ip = this.getClientIp(req);
 
 
-            const userAgent = req.headers['user-agent']
+            let ipData
+            try {
+                let ipInfo = await this.searcher.search(ip)
+                ipData = ipInfo?.region ?? null
+            } catch {
+                ipData = null
+            }
+
+            const userAgent = req.headers['user-agent'] ?? null;
             const deviceType = req.headers['device-type'] ?? '浏览器'
             const deviceType = req.headers['device-type'] ?? '浏览器'
 
 
-            let reqData
-            if (method === 'get') {
-                reqData = req.query
-            } else {
-                reqData = req.body
-            }
+            let reqData = method.toLowerCase() === 'get' ? req.query : req.body
+
+            const safe = (v) => (v === undefined ? null : v)
 
 
-            let sql = 'INSERT INTO requestLog (create_user, create_time, method, reqData, resData, code, ip, ua, deviceType, apiName, location, url) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'
-            let r = await db.query(sql, [reqData.uuid ?? '', time, method, reqData ?? {}, resData, resData.code, ip, userAgent, deviceType, namespace ?? '未知', ipData ?? '未知', path])
-            if (!r || r.affectedRows !== 1)
+            const sql = `
+            INSERT INTO requestLog 
+            (create_user, create_time, method, reqData, resData, code, ip, ua, deviceType, apiName, location, url) 
+            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+        `
+
+            const params = [
+                safe(reqData?.uuid) ?? '',                // create_user
+                time,                                     // create_time
+                method,                                   // method
+                JSON.stringify(reqData ?? {}),            // reqData
+                JSON.stringify(resData ?? {}),            // resData
+                safe(resData?.code),                      // code
+                safe(ip),                                 // ip
+                safe(userAgent),                          // ua
+                safe(deviceType),                         // deviceType
+                namespace ?? '未知',                       // apiName
+                safe(ipData) ?? '未知',                    // location
+                path                                      // url
+            ];
+
+            let r = await db.query(sql, params)
+            if (!r || r.affectedRows !== 1) {
                 this.logger.error(`插入日志信息失败!数据库错误`)
                 this.logger.error(`插入日志信息失败!数据库错误`)
+            }
         } catch (error) {
         } catch (error) {
             this.logger.error(`插入日志信息失败!${error}`)
             this.logger.error(`插入日志信息失败!${error}`)
         }
         }