0

我有一个项目存储库,并为不同的客户提供多个数据库。

以下类型的数据库命名和 URL 连接,我用于基于访问 URL 连接数据库:

客户数据库

  • shreyas _db (http: //shreyas.locahost :3001)
  • ajay _db (http: //ajay.locahost :3001)
  • vijay _db (http: //vijay.locahost :3001)

请指导如何使用 Express 在 NodeJs 中实现此结构。

谢谢

4

1 回答 1

0

这是我想出的解决方案:

  1. 添加路由器

    app.use('/api', 等待 APIRouter())

  2. 连接到路由器中间件中的不同 DBS。获取子域(如果你使用Nginx,你可能会发现req.subdomains 或req.host 没有返回你所期望的,尝试使用req.headers.referer 代替),使用res.locals 保存DB,这样你就可以得到它来自每个 API 调用。

 export const APIRouter = async () => {
      
      const router = express.Router()
      const client = await connectDatabase()
    
      router.use(async (req, res, next) => {
        //const host = req.headers.referer?.replace("https://","");
        //const subdomain = host ? host.substring(0, host.indexOf('.')) : 'main'
        
        const subdomain = req.subdomains.length ? req.subdomains.length[0] : 'main'
        const db = client.db(subdomain)
    
        res.locals.db = {
            clients: db.collection<Client>('clients'),
          }
          next()
        }
      )
     return router
    };

于 2020-11-04T14:58:33.657 回答