From eaef697ef2789586b4fb25866ededaa68d876bb8 Mon Sep 17 00:00:00 2001 From: "LAPTOP-EJ2PF6VA\\genie" Date: Fri, 17 Apr 2026 23:38:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E7=82=BA=E4=BE=9D=20db=20=E5=8F=83?= =?UTF-8?q?=E6=95=B8=E5=88=87=E6=8F=9B=20(use=20x=5Fdb)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server.js | 17 ++++++++++++++--- src/services/ormService.js | 21 +++++++++++++++------ src/services/uploadService.js | 1 + 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/server.js b/server.js index df27f6e..0c7ae4c 100644 --- a/server.js +++ b/server.js @@ -51,10 +51,16 @@ app.post(ormRoutes, async (req, res, next) => { try { const params = ormService.prepareOrmPayload(req); // 增加一個 log 觀察是哪個路徑進來的 - logger.info(`Incoming Request: ${req.url} -> SP: ${req.params.name}`); - // logger.info(`Calling SP: ${req.params.name} by User: ${req.body.token || 'Guest'}`); + // logger.info(`Incoming Request: ${req.url} -> SP: ${req.params.name}`); + logger.info(`Incoming Request: ${req.url} -> DB: ${req.params.dbname} -> SP: ${req.params.name}`); + + const result = await ormService.executeSp( + req.params.name, + params, + req.params.dsNo, + req.params.dbname + ); - const result = await ormService.executeSp(req.params.name, params, req.params.dsNo); res.json(result); } catch (err) { logger.error(`API Error on ${req.params.name}: ${err.message}`); @@ -73,6 +79,11 @@ app.post('/upload/:dbname/:typeid', upload.single('file'), (req, res) => { res.json({ status: 0, data: { value: fileUrl, url: fileUrl }, msg: 'success' }); }); +// 20260409 test IIS 反向代理 +app.get('/ping', (req, res) => { + res.send('pong! IIS Reverse Proxy Success !!'); +}); + // 全域錯誤處理 app.use((err, req, res, next) => { res.status(err.status || 500).json({ status: err.status || 500, msg: err.message }); diff --git a/src/services/ormService.js b/src/services/ormService.js index 4799c42..553bbda 100644 --- a/src/services/ormService.js +++ b/src/services/ormService.js @@ -13,8 +13,9 @@ class OrmService { * @param {string} spName - SP 蝔 * @param {Array} params - 賊 * @param {number|string} dsNo - 單澆隞 (2, 3, 8, 20) + * @param {string} dbName - 敺頝舐勗敺鞈摨怠蝔 (req.params.dbname) */ - async executeSp(spName, params, dsNo) { + async executeSp(spName, params, dsNo, dbName) { if (spName === "orm_api") { spName = "orm_api_v2" } @@ -24,9 +25,15 @@ class OrmService { // MariaDB SP 澆怨瘜: CALL sp_name(?, ?, ...) const placeholders = safeParams.map(() => '?').join(','); - const sql = (safeParams.length > 0 || spName != "zen_null") - ? `CALL ${spName}(${placeholders})` - : `CALL ${spName}()`; // ∪豢鋆銝祈 + + // --- DB 頛 --- + // 雿輻 `dbName`.`spName` 隤瘜蝣箔冽迤蝣箇鞈摨怠瑁 + // 雿輻典撘 (`) 鋆孵蝔曹誑脫迫寞摮萄銵蝒 + const fullSpName = dbName ? `\`${dbName}\`.\`${spName}\`` : `\`${spName}\``; + + const sql = (safeParams.length > 0 || spName !== "zen_null") + ? `CALL ${fullSpName}(${placeholders})` + : `CALL ${fullSpName}()`; // debug & hard code /*if (spName === "zen_null") { @@ -47,7 +54,8 @@ class OrmService { const startTime = Date.now(); // 撠貉箏銝脫嫣噶憿舐內嚗交舫瑕銝(JSON)芣瑟摰游 const paramsDebug = JSON.stringify(params); - logger.info(`[SQL EXECUTE] Query: ${sql} | Params: ${paramsDebug}`); + // logger.info(`[SQL EXECUTE] Query: ${sql} | Params: ${paramsDebug}`); + logger.info(`[SQL EXECUTE] DB: ${dbName} | Query: ${sql} | Params: ${paramsDebug}`); // -------------------- try { @@ -58,7 +66,8 @@ class OrmService { const status = resultSets[0] && resultSets[0][0] ? resultSets[0][0] : { code: 0, msg: 'Success', recno: 0 }; const dataSet = resultSets[1] || []; - logger.info(`[SQL SUCCESS] SP: ${spName} | Time: ${duration}ms | Status: ${status.code}`); + // logger.info(`[SQL SUCCESS] SP: ${spName} | Time: ${duration}ms | Status: ${status.code}`); + logger.info(`[SQL SUCCESS] DB: ${dbName} | SP: ${spName} | Time: ${duration}ms | Status: ${status.code}`); // 寞 dsNo 澆喳批捆蝯血蝡 amis const dsNoInt = parseInt(dsNo); diff --git a/src/services/uploadService.js b/src/services/uploadService.js index 210e344..11ed98e 100644 --- a/src/services/uploadService.js +++ b/src/services/uploadService.js @@ -6,6 +6,7 @@ const crypto = require('crypto'); // 冽潛冽摮銝 const storage = multer.diskStorage({ destination: (req, file, cb) => { const { dbname, typeid } = req.params; + // cannot change db name for difference corp 20260417 const uploadPath = path.join(__dirname, `../../public/upload/${dbname}/${typeid}`); fs.mkdirSync(uploadPath, { recursive: true }); cb(null, uploadPath);