Skip to content

Support more than one DB connection on different architectural layers #67

Open
@serhii-chernenko

Description

@serhii-chernenko

I want to separate logic between Nuxt 3 Layers and different DB connections:

  • For ecommerce logic such as customers, orders, payments, etc.
  • And for CMS logic such as pages, blocks, etc.

I want to have a few DB connections. Is it possible? If not, can I expect this feature will be delivered soon?

I see it's possible for SQL databases for Nitro OOTB. I want to have the same for MongoDB:
https://nitro.build/guide/database#configuration

I also checked your repo and docs, I see you support more than one defineMongooseConnection:
https://nuxt-mongoose.nuxt.space/docs/api/utils#definemongooseconnection
But I suspect it doesn't support different models for different connections. I guess, all the used records will be just duplicated between the connections.

I expect separation by different connections and models dirs.

// nuxt.config.ts
export default defineNuxtConfig({
  mongoose: [
  {
    uri: 'process.env.MONGODB_CMS_URI',
    options: {},
    modelsDir: 'models/cms',
    devtools: true,
  },
  {
    uri: 'process.env.MONGODB_ECOMMERCE_URI',
    options: {},
    modelsDir: 'models/ecommerce',
    devtools: true,
  }
 ],
})

Usage:

  • page.scheme.ts in models/cms directory has to be automatically prefixed like CmsPage:
// layers/cms/server/api/pages/index.get.ts
export default defineEventHandler(async (event) => {
  try {
    return await CmsPage.find({})
  }
  catch (error) {
    return error
  }
})
  • user.scheme.ts in models/ecommerce directory has to be automatically prefixed like EcommerceUser:
// layers/ecommerce/server/api/users/index.get.ts
export default defineEventHandler(async (event) => {
  try {
    return await EcommerceUser.find({})
  }
  catch (error) {
    return error
  }
})

Just keep in mind that the folders have to be in different layers, just merged in result application, like

root                        # Project root directory
|
|—— layers                  # Custom Nuxt Layers for core functionalities
|   |—— core                # Core layer with core utilities and composables
|   |—— cms                 # Content Management System functionality
|   |—— ecommerce           # Ecommerce functionality
|   
|—— apps                    # Nuxt 3 applications for different platform parts
    |—— storefront          # Storefront application for public user interactions
    |—— admin               # Admin application for management

More about layers here:

Let me know please, if you don't plan to support the described feature, I'd try to implement it for my own project. But it'd be nice if you advise me on what to pay my attention.

It also could solve the previous Issues:

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions