Bind API to 127.0.0.1, use bind variables, move Oracle credentials to site initializer
This commit is contained in:
1 parent
b134f4e852
commit
790c779d07
2 files changed
+49
-46
No files matched your search
@@ -1,26 +1,28 @@
|
||||
const express = require('express');
|
||||
const oracledb = require('oracledb');
|
||||
const cors = require('cors');
|
||||
const bodyParser = require('body-parser');
|
||||
|
||||
const app = express();
|
||||
app.use(cors());
|
||||
app.use(bodyParser.json());
|
||||
|
||||
// Oracle 連線設定
|
||||
const dbConfig = {
|
||||
user: process.env.ORACLE_USER || 'VENDOR_WEB',
|
||||
password: process.env.ORACLE_PASSWORD || 'NfuWEB_5066',
|
||||
connectString: process.env.ORACLE_CONNECT || '140.130.3.186:1521/dbnfua'
|
||||
user: process.env.ORACLE_USER,
|
||||
password: process.env.ORACLE_PASSWORD,
|
||||
connectString: process.env.ORACLE_CONNECT
|
||||
};
|
||||
if (!dbConfig.user || !dbConfig.password || !dbConfig.connectString) {
|
||||
console.error('缺少 ORACLE_USER / ORACLE_PASSWORD / ORACLE_CONNECT,停止啟動');
|
||||
process.exit(1);
|
||||
}
|
||||
oracledb.fetchAsString = [ oracledb.DATE ];
|
||||
|
||||
// 通用查詢函式
|
||||
async function executeQuery(sql) {
|
||||
async function executeQuery(sql, binds = {}) {
|
||||
let connection;
|
||||
try {
|
||||
connection = await oracledb.getConnection(dbConfig);
|
||||
const result = await connection.execute(sql, {}, { outFormat: oracledb.OUT_FORMAT_ARRAY });
|
||||
const result = await connection.execute(sql, binds, { outFormat: oracledb.OUT_FORMAT_ARRAY });
|
||||
return result.rows || [];
|
||||
} catch (err) {
|
||||
console.error('查詢錯誤:', err);
|
||||
@@ -40,8 +42,8 @@ async function executeQuery(sql) {
|
||||
app.get('/api/teachers/:id', async (req, res) => {
|
||||
try {
|
||||
const teacherId = req.params.id;
|
||||
const sql = `SELECT * FROM VRW_TEACHER WHERE T_ID = '${teacherId}'`;
|
||||
const result = await executeQuery(sql);
|
||||
const sql = `SELECT * FROM VRW_TEACHER WHERE T_ID = :tid`;
|
||||
const result = await executeQuery(sql, { tid: teacherId });
|
||||
res.json(result);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
@@ -52,8 +54,8 @@ app.get('/api/teachers/:id', async (req, res) => {
|
||||
app.get('/api/courses/:id', async (req, res) => {
|
||||
try {
|
||||
const teacherId = req.params.id;
|
||||
const sql = `SELECT * FROM VRW_COURSE WHERE T_ID = '${teacherId}'`;
|
||||
const result = await executeQuery(sql);
|
||||
const sql = `SELECT * FROM VRW_COURSE WHERE T_ID = :tid`;
|
||||
const result = await executeQuery(sql, { tid: teacherId });
|
||||
res.json(result);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
@@ -64,8 +66,8 @@ app.get('/api/courses/:id', async (req, res) => {
|
||||
app.get('/api/periodicals/:id', async (req, res) => {
|
||||
try {
|
||||
const teacherId = req.params.id;
|
||||
const sql = `SELECT * FROM VRW_PERIODICAL WHERE T_ID = '${teacherId}'`;
|
||||
const result = await executeQuery(sql);
|
||||
const sql = `SELECT * FROM VRW_PERIODICAL WHERE T_ID = :tid`;
|
||||
const result = await executeQuery(sql, { tid: teacherId });
|
||||
res.json(result);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
@@ -76,8 +78,8 @@ app.get('/api/periodicals/:id', async (req, res) => {
|
||||
app.get('/api/books/:id', async (req, res) => {
|
||||
try {
|
||||
const teacherId = req.params.id;
|
||||
const sql = `SELECT * FROM VRW_BOOK WHERE T_ID = '${teacherId}'`;
|
||||
const result = await executeQuery(sql);
|
||||
const sql = `SELECT * FROM VRW_BOOK WHERE T_ID = :tid`;
|
||||
const result = await executeQuery(sql, { tid: teacherId });
|
||||
res.json(result);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
@@ -88,8 +90,8 @@ app.get('/api/books/:id', async (req, res) => {
|
||||
app.get('/api/research_acts/:id', async (req, res) => {
|
||||
try {
|
||||
const teacherId = req.params.id;
|
||||
const sql = `SELECT * FROM VRW_RESEARCH_ACT WHERE T_ID = '${teacherId}'`;
|
||||
const result = await executeQuery(sql);
|
||||
const sql = `SELECT * FROM VRW_RESEARCH_ACT WHERE T_ID = :tid`;
|
||||
const result = await executeQuery(sql, { tid: teacherId });
|
||||
res.json(result);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
@@ -100,8 +102,8 @@ app.get('/api/research_acts/:id', async (req, res) => {
|
||||
app.get('/api/plans/:id', async (req, res) => {
|
||||
try {
|
||||
const teacherId = req.params.id;
|
||||
const sql = `SELECT * FROM VRW_PLAN_DOC WHERE T_ID = '${teacherId}'`;
|
||||
const result = await executeQuery(sql);
|
||||
const sql = `SELECT * FROM VRW_PLAN_DOC WHERE T_ID = :tid`;
|
||||
const result = await executeQuery(sql, { tid: teacherId });
|
||||
res.json(result);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
@@ -112,8 +114,8 @@ app.get('/api/plans/:id', async (req, res) => {
|
||||
app.get('/api/patents/:id', async (req, res) => {
|
||||
try {
|
||||
const teacherId = req.params.id;
|
||||
const sql = `SELECT * FROM VRW_PATENT WHERE T_ID = '${teacherId}'`;
|
||||
const result = await executeQuery(sql);
|
||||
const sql = `SELECT * FROM VRW_PATENT WHERE T_ID = :tid`;
|
||||
const result = await executeQuery(sql, { tid: teacherId });
|
||||
res.json(result);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
@@ -124,8 +126,8 @@ app.get('/api/patents/:id', async (req, res) => {
|
||||
app.get('/api/awards/:id', async (req, res) => {
|
||||
try {
|
||||
const teacherId = req.params.id;
|
||||
const sql = `SELECT * FROM VRW_AWARD WHERE T_ID = '${teacherId}'`;
|
||||
const result = await executeQuery(sql);
|
||||
const sql = `SELECT * FROM VRW_AWARD WHERE T_ID = :tid`;
|
||||
const result = await executeQuery(sql, { tid: teacherId });
|
||||
res.json(result);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
@@ -136,8 +138,8 @@ app.get('/api/awards/:id', async (req, res) => {
|
||||
app.get('/api/dissertations/:id', async (req, res) => {
|
||||
try {
|
||||
const teacherId = req.params.id;
|
||||
const sql = `SELECT * FROM VRW_DISSERTATIONS WHERE T_ID = '${teacherId}'`;
|
||||
const result = await executeQuery(sql);
|
||||
const sql = `SELECT * FROM VRW_DISSERTATIONS WHERE T_ID = :tid`;
|
||||
const result = await executeQuery(sql, { tid: teacherId });
|
||||
res.json(result);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
@@ -148,8 +150,8 @@ app.get('/api/dissertations/:id', async (req, res) => {
|
||||
app.get('/api/educations/:id', async (req, res) => {
|
||||
try {
|
||||
const teacherId = req.params.id;
|
||||
const sql = `SELECT * FROM VRW_EDUCATION WHERE T_ID = '${teacherId}'`;
|
||||
const result = await executeQuery(sql);
|
||||
const sql = `SELECT * FROM VRW_EDUCATION WHERE T_ID = :tid`;
|
||||
const result = await executeQuery(sql, { tid: teacherId });
|
||||
res.json(result);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
@@ -160,8 +162,8 @@ app.get('/api/educations/:id', async (req, res) => {
|
||||
app.get('/api/certifications/:id', async (req, res) => {
|
||||
try {
|
||||
const teacherId = req.params.id;
|
||||
const sql = `SELECT * FROM VRW_CERTIFICATION WHERE T_ID = '${teacherId}'`;
|
||||
const result = await executeQuery(sql);
|
||||
const sql = `SELECT * FROM VRW_CERTIFICATION WHERE T_ID = :tid`;
|
||||
const result = await executeQuery(sql, { tid: teacherId });
|
||||
res.json(result);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
@@ -172,8 +174,8 @@ app.get('/api/certifications/:id', async (req, res) => {
|
||||
app.get('/api/award_contests/:id', async (req, res) => {
|
||||
try {
|
||||
const teacherId = req.params.id;
|
||||
const sql = `SELECT * FROM VRW_AWARD_CONTEST WHERE T_ID = '${teacherId}'`;
|
||||
const result = await executeQuery(sql);
|
||||
const sql = `SELECT * FROM VRW_AWARD_CONTEST WHERE T_ID = :tid`;
|
||||
const result = await executeQuery(sql, { tid: teacherId });
|
||||
res.json(result);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
@@ -184,8 +186,8 @@ app.get('/api/award_contests/:id', async (req, res) => {
|
||||
app.get('/api/talks/:id', async (req, res) => {
|
||||
try {
|
||||
const teacherId = req.params.id;
|
||||
const sql = `SELECT * FROM VRW_TALK WHERE T_ID = '${teacherId}'`;
|
||||
const result = await executeQuery(sql);
|
||||
const sql = `SELECT * FROM VRW_TALK WHERE T_ID = :tid`;
|
||||
const result = await executeQuery(sql, { tid: teacherId });
|
||||
res.json(result);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
@@ -196,8 +198,8 @@ app.get('/api/talks/:id', async (req, res) => {
|
||||
app.get('/api/pro_services/:id', async (req, res) => {
|
||||
try {
|
||||
const teacherId = req.params.id;
|
||||
const sql = `SELECT * FROM VRW_PRO_SERVICE WHERE T_ID = '${teacherId}'`;
|
||||
const result = await executeQuery(sql);
|
||||
const sql = `SELECT * FROM VRW_PRO_SERVICE WHERE T_ID = :tid`;
|
||||
const result = await executeQuery(sql, { tid: teacherId });
|
||||
res.json(result);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
@@ -208,8 +210,8 @@ app.get('/api/pro_services/:id', async (req, res) => {
|
||||
app.get('/api/pretechtrans/:id', async (req, res) => {
|
||||
try {
|
||||
const teacherId = req.params.id;
|
||||
const sql = `SELECT * FROM VRW_PRETECHTRAN WHERE T_ID = '${teacherId}'`;
|
||||
const result = await executeQuery(sql);
|
||||
const sql = `SELECT * FROM VRW_PRETECHTRAN WHERE T_ID = :tid`;
|
||||
const result = await executeQuery(sql, { tid: teacherId });
|
||||
res.json(result);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
@@ -220,8 +222,8 @@ app.get('/api/pretechtrans/:id', async (req, res) => {
|
||||
app.get('/api/techtrans/:id', async (req, res) => {
|
||||
try {
|
||||
const teacherId = req.params.id;
|
||||
const sql = `SELECT * FROM VRW_TECHTRAN WHERE T_ID = '${teacherId}'`;
|
||||
const result = await executeQuery(sql);
|
||||
const sql = `SELECT * FROM VRW_TECHTRAN WHERE T_ID = :tid`;
|
||||
const result = await executeQuery(sql, { tid: teacherId });
|
||||
res.json(result);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
@@ -232,8 +234,8 @@ app.get('/api/techtrans/:id', async (req, res) => {
|
||||
app.get('/api/experiences/:id', async (req, res) => {
|
||||
try {
|
||||
const teacherId = req.params.id;
|
||||
const sql = `SELECT * FROM VRW_EXPERIENCE WHERE T_ID = '${teacherId}'`;
|
||||
const result = await executeQuery(sql);
|
||||
const sql = `SELECT * FROM VRW_EXPERIENCE WHERE T_ID = :tid`;
|
||||
const result = await executeQuery(sql, { tid: teacherId });
|
||||
res.json(result);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: err.message });
|
||||
@@ -246,7 +248,8 @@ app.get('/health', (req, res) => {
|
||||
});
|
||||
|
||||
const PORT = process.env.PORT || 3000;
|
||||
app.listen(PORT, () => {
|
||||
console.log(`NFU Oracle API 伺服器運行在 http://localhost:${PORT}`);
|
||||
const HOST = '127.0.0.1';
|
||||
app.listen(PORT, HOST, () => {
|
||||
console.log(`NFU Oracle API 伺服器運行在 http://${HOST}:${PORT}`);
|
||||
console.log(`Oracle 連接: ${dbConfig.connectString}`);
|
||||
});
|
||||
@@ -2,7 +2,7 @@ require 'net/http'
|
||||
require 'json'
|
||||
|
||||
module NfuSyncPlugin
|
||||
API_BASE_URL = ENV['NFU_API_URL'] || 'http://localhost:3000/api'
|
||||
API_BASE_URL = ENV['NFU_API_URL'] || 'http://127.0.0.1:3000/api'
|
||||
|
||||
class << self
|
||||
def query_api(endpoint, teacher_id)
|
||||
@@ -851,10 +851,10 @@ module NfuSyncPlugin
|
||||
end
|
||||
|
||||
namespace :sync_nfu_personal_plugins do
|
||||
task :ensure_api_running do
|
||||
task :ensure_api_running => :environment do
|
||||
require 'net/http'
|
||||
require 'timeout'
|
||||
api_url = ENV['NFU_API_URL'] || 'http://localhost:3000/health'
|
||||
api_url = ENV['NFU_API_URL'] || 'http://127.0.0.1:3000/health'
|
||||
api_running = false
|
||||
begin
|
||||
Timeout.timeout(3) { api_running = Net::HTTP.get_response(URI(api_url)).is_a?(Net::HTTPSuccess) }
|
||||
|
||||
Reference in new issue
Block a user