簡體   English   中英

使用 expressjs 和 prisma 根據請求源更改數據庫

[英]change database based on request origin using expressjs & prisma

我想根據請求來源動態更改數據庫。

我創建了一個在每條路線上調用的 globalMiddleware。

 // middlwares/global.middleware.js import DBController from "../controllers/db.controller.js"; import { db1, db2 } from "../prisma/prismaClient.js"; export default (req, res, next) => { const dbcontroller = DBController(); const domain = req.get("origin"); switch (domain) { case "http://localhost:3000": dbcontroller.setDB(db1); break; case "http://localhost:3001": dbcontroller.setDB(db2); break; } next(); };

但是當我通過調用dbcontroller.setDB()方法並最終調用 this.DB 在 DBController 中設置數據庫時,它是未定義的。

 // controller/db.controller.js import autoBind from "auto-bind"; class DBController { constructor() { this.DB; autoBind(this); } setDB(prismaClient) { this.DB = prismaClient; } } export default DBController;

 // conrtoller/controller.js import { generateResponse } from "./../util/public.util.js"; import DBController from "./db.controller.js"; import autoBind from "auto-bind"; import createError from "http-errors"; class Controller extends DBController { constructor() { super(); this.generateResponse = generateResponse; this.createError = createError; autoBind(this); } } export default Controller;

 // controller/article.controller.js import Controller from "./controller.js"; class ArticleController extends Controller { async get(req, res, next) { try { const articles = await this.DB.article.findMany(); //this.DB is undefined const response = this.generateResponse("success", articles); res.send(response); } catch (error) { next(error); } } } export default new ArticleController();

我不知道我應該如何在可以在任何地方使用的頂級 controller 中設置全局數據庫。

我也嘗試 js global.db vars 和 express app.set("db",db1) 但我認為這些不是這項工作的好解決方案。

最后,我修改了global.middleware.js文件並修改request ,而不是在高級controller中設置數據庫:

 import { prisma_aramgostar, prisma_karen } from "../prisma/prismaClient.js"; export default async(req, res, next) => { const domain = await req.get("x-forwarded-host"); switch (domain) { case "localhost:3000": req.DB = prisma_aramgostar; console.log("db: aramgostar"); break; case "127.0.0.1:3001": req.DB = prisma_karen; console.log("db: karen"); break; } next(); };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM