我有一个项目存储库,并为不同的客户提供多个数据库。
以下类型的数据库命名和 URL 连接,我用于基于访问 URL 连接数据库:
客户数据库
- shreyas _db (http: //shreyas.locahost :3001)
- ajay _db (http: //ajay.locahost :3001)
- vijay _db (http: //vijay.locahost :3001)
请指导如何使用 Express 在 NodeJs 中实现此结构。
谢谢
我有一个项目存储库,并为不同的客户提供多个数据库。
以下类型的数据库命名和 URL 连接,我用于基于访问 URL 连接数据库:
客户数据库
请指导如何使用 Express 在 NodeJs 中实现此结构。
谢谢
这是我想出的解决方案:
添加路由器
app.use('/api', 等待 APIRouter())
连接到路由器中间件中的不同 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
};