2025-06-19 gateway.mjs
2025-06-19 gateway.mjs
1 | // gateway.mjs |
很好 — 你貼的 gateway.mjs 看起來很完整了,功能與結構也正確。下面我把它逐項檢查、補充建議、常見問題排查指令都寫清楚,方便你立刻驗證、上線(或繼續下一步)。我會把簡稱翻譯也放進去(你之前要求的)。
1) 立即檢查:這個檔案做了什麼(摘要)
- 用 Express 建一個 HTTP server。
cors()已啟用 → 允許跨來源(方便前端從 Windows 呼叫)。- 定義了兩個 provider adapter:
openai與deepseek。若沒有各自的 API key,會回 mock 回覆(方便測試)。 GET /health與POST /api/chat路由都已正確設置。- 監聽
PORT(預設 4000)。
(簡稱翻譯:CORS = Cross-Origin Resource Sharing(跨來源資源共享),API = Application Programming Interface(應用程式介面)。)
2) 如果你要馬上測試(步驟)
在 Mac B 的專案資料夾確定有
.env(若要用真實 API):1
2
3PORT=4000
OPENAI_API_KEY=sk-...
DEEPSEEK_API_KEY=ds-...啟動/重啟 server:
1
2
3node gateway.mjs
# 或(建議未來用 pm2)
pm2 start gateway.mjs --name mcp-gateway在同機或 Windows 測試(你之前 curl /health 成功):
1
2
3curl http://192.168.0.103:4000/health
curl -X POST http://192.168.0.103:4000/api/chat -H "Content-Type: application/json" \
-d '{"provider":"openai","messages":[{"role":"user","content":"嗨"}]}'
3) 常見問題與排查(你會遇到的)
Failed to fetch(在瀏覽器)→ 通常是 CORS 或 網路。你已加cors(),且之前能curl成功,所以已解決。fetch is not defined(在 Node)→ 代表你的 Node 版本 < 18(舊版 Node 沒有內建fetch)。解法:檢查版本:
node -v若 < 18,安裝
node-fetch並修改開頭:1
npm i node-fetch
在檔案開頭:
1
import fetch from 'node-fetch';
若回傳 500 且 console 顯示
provider error→ 把console.error(err)補成console.error(err?.stack ?? err)看詳細錯誤,或在 adapter 裡加 try/catch 逐步 log。
4) 建議(小改善、比較實務)
限制 CORS(生產) — 目前
app.use(cors())允許所有來源,測試時方便;上線時改成只允許你的前端:1
app.use(cors({ origin: ['http://localhost:5173','http://你的前端網址'] }));
增加 request logging(方便除錯):
1
2
3
4app.use((req, res, next) => {
console.log(new Date().toISOString(), req.method, req.url);
next();
});加上超時/重試(避免 provider 卡住)— 可用
AbortController(Node 18+)或在 fetch 外包 timeout:1
2
3const controller = new AbortController();
setTimeout(() => controller.abort(), 15000); // 15s timeout
const resp = await fetch(url, { ..., signal: controller.signal });更友善的錯誤回應:
1
2
3
4
5try { ... }
catch (err) {
console.error(err);
res.status(502).json({ error: 'upstream provider failed', detail: err.message });
}不要把 API key 放到版本控制 —
.env加到.gitignore。
5) 如果你要把真實 API key 放進去(步驟)
在
~/mcp-gateway/.env填入:1
2
3OPENAI_API_KEY=sk-...
DEEPSEEK_API_KEY=ds-...
PORT=4000重啟 server(或用 pm2 restart):
1
2
3pm2 restart mcp-gateway # 如果用 pm2
# 或
node gateway.mjs用前端或 curl 測試(若 API key 有問題,OpenAI 會回 401 或 429)。
6) 要常駐 & 合螢幕也能跑(快速指令)
1 | npm i -g pm2 |
另外 mac 合螢幕睡眠要關(System Settings → Battery → Prevent computer from sleeping when display is off),或用 Amphetamine App。
7) 下一步建議(你可以選一個)
- A. 我幫你把
gateway.mjs加上:request logging、fetch timeout、更清楚的 error message(貼給你修改後的完整檔案)。 - B. 你把
node -v回我,我幫你檢查是否需要node-fetch,如果需要,我直接給可貼上的修改。 - C. 你想現在把 OPENAI_KEY 放
.env,我給你測試指令與如何檢查 token 被使用的簡單方法。
你選一個,我立即把對應的完整程式或指令貼給你。