arashsheyda / nuxt-mongoose

A Nuxt module for simplifying the use of Mongoose in your project.
https://docs.arashsheyda.me/nuxt-mongoose
75 stars 13 forks source link

how to switch database for tenant isolation #49

Open zailaib opened 6 months ago

zailaib commented 6 months ago

not working code

// tenant-isolation.js
import Utils from '~/server/Utils';

export default defineNuxtPlugin({
    name: 'switch-tenant-db',
    async setup(nuxtApp) {

        const url = nuxtApp.ssrContext?.event?.node?.req?.url;
        console.log("url is:", url);
        if (url == "/my" || url == "/login") {
            console.log("do not switch tenant db");
        } else {
            const cookieStr = nuxtApp.ssrContext?.event?.headers.get("cookie") || "";
            const cookies = Utils.parseCookiesByStr(cookieStr);
            console.log("cookies is:", cookies);
            const tenant_id = cookies.tenant_id;
            const dbName = `tenant_${tenant_id}`; // 根据租户标识符构建数据库名称
            console.log("switch tenant db");
            if (nuxtApp.ssrContext && nuxtApp.ssrContext.runtimeConfig) {
                nuxtApp.ssrContext.runtimeConfig = Object.assign({}, nuxtApp.ssrContext.runtimeConfig, {
                    mongoose: {
                        uri: nuxtApp.ssrContext.runtimeConfig.mongoose.uri,
                        options: {
                            dbName: dbName,
                        },
                        modelsDir: nuxtApp.ssrContext.runtimeConfig.mongoose.modelsDir
                    },
                  });
                console.log("after switch is:", nuxtApp.ssrContext?.runtimeConfig?.mongoose);
            }
        }
    }
});