Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 37b5e425c4 | |||
| 32deb047c5 | |||
| 4036c56010 | |||
| c62ae2e134 |
106
README.md
106
README.md
@ -27,10 +27,116 @@ export default defineNuxtConfig({
|
|||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
|
||||||
|
You can configure the module by adding a `mongoose` section to your `nuxt.config` file:
|
||||||
|
|
||||||
|
```ts
|
||||||
|
export default defineNuxtConfig({
|
||||||
|
mongoose: {
|
||||||
|
uri: 'process.env.MONGODB_URI',
|
||||||
|
options: {},
|
||||||
|
modelsDir: 'models',
|
||||||
|
},
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
By default, `nuxt-mongoose` will auto-import your schemas from the `models` directory in the `server` directory. You can change this behavior by setting the `modelsDir` option.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### 🛠️ **Quick Setup Without Configuration**
|
||||||
|
|
||||||
|
If you prefer to use the default configuration, skip adding the `mongoose` section to your `nuxt.config.ts` file. Simply provide your MongoDB connection URI in a `.env` file like this:
|
||||||
|
|
||||||
|
```env
|
||||||
|
MONGODB_URI="mongodb+srv://username:password@cluster0.mongodb.net/<database-name>?retryWrites=true&w=majority"
|
||||||
|
```
|
||||||
|
|
||||||
|
> 🔹 Replace `username`, `password`, and `<database name>` with your MongoDB credentials and database name.
|
||||||
|
|
||||||
|
That's it! The module will automatically use the `MONGODB_URI` and default settings for your connection. No additional configuration is required.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*For more details about connection options, check out the [Mongoose documentation](https://mongoosejs.com/docs/connections.html#options).*
|
||||||
|
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
### defineMongooseConnection
|
||||||
|
|
||||||
|
This function creates a new Mongoose connection. Example usage:
|
||||||
|
|
||||||
|
```ts
|
||||||
|
import { defineMongooseConnection } from '#nuxt/mongoose'
|
||||||
|
|
||||||
|
export const connection = defineMongooseConnection('mongodb://127.0.0.1/nuxt-mongoose')
|
||||||
|
```
|
||||||
|
|
||||||
|
### defineMongooseModel
|
||||||
|
|
||||||
|
This function creates a new Mongoose model with schema. Example usage:
|
||||||
|
|
||||||
|
```ts
|
||||||
|
import { defineMongooseModel } from '#nuxt/mongoose'
|
||||||
|
|
||||||
|
export const User = defineMongooseModel('User', {
|
||||||
|
name: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
**or you could use it like:**
|
||||||
|
|
||||||
|
```ts
|
||||||
|
export const User = defineMongooseModel({
|
||||||
|
name: 'User',
|
||||||
|
schema: {
|
||||||
|
name: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
#### Connecting to an Existing Collection
|
||||||
|
|
||||||
|
If you need to connect to an **existing collection** in the database, you must specify the collection name using the `options` field. Otherwise, Mongoose will create a new collection based on the model name.
|
||||||
|
|
||||||
|
```ts
|
||||||
|
import { defineMongooseModel } from '#nuxt/mongoose'
|
||||||
|
|
||||||
|
export const ProductSchema = defineMongooseModel({
|
||||||
|
name: 'Product',
|
||||||
|
schema: {
|
||||||
|
name: { type: String, required: true },
|
||||||
|
price: { type: Number, required: true },
|
||||||
|
stock: { type: Number, default: 0 },
|
||||||
|
},
|
||||||
|
options: {
|
||||||
|
collection: 'products_collection', // Ensure it uses the correct collection name
|
||||||
|
},
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Important Notes
|
||||||
|
|
||||||
|
- Using the `options.collection` field ensures that the model interacts with the specified collection (`products_collection` in the example above).
|
||||||
|
- Without this option, a new collection will be created using the pluralized version of the model name (e.g., `Products`).
|
||||||
|
|
||||||
|
|
||||||
### Configuration
|
### Configuration
|
||||||
|
|
||||||
For detailed [configuration](https://docs.arashsheyda.me/nuxt-mongoose/getting-started/configuration) and usage instructions, please refer to our [documentation](https://docs.arashsheyda.me/nuxt-mongoose).
|
For detailed [configuration](https://docs.arashsheyda.me/nuxt-mongoose/getting-started/configuration) and usage instructions, please refer to our [documentation](https://docs.arashsheyda.me/nuxt-mongoose).
|
||||||
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
[MIT License](./LICENSE)
|
[MIT License](./LICENSE)
|
||||||
|
|||||||
@ -39,6 +39,7 @@
|
|||||||
"dist"
|
"dist"
|
||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"prepare": "npm run build",
|
||||||
"build": "nuxt-module-build && npm run build:client",
|
"build": "nuxt-module-build && npm run build:client",
|
||||||
"build:client": "nuxi generate client",
|
"build:client": "nuxi generate client",
|
||||||
"dev": "nuxi dev playground",
|
"dev": "nuxi dev playground",
|
||||||
@ -49,8 +50,8 @@
|
|||||||
"lint": "eslint . --fix"
|
"lint": "eslint . --fix"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nuxt/devtools-kit": "1.0.8",
|
"@nuxt/devtools-kit": "^1.3.9",
|
||||||
"@nuxt/devtools-ui-kit": "1.0.8",
|
"@nuxt/devtools-ui-kit": "^1.3.9",
|
||||||
"@nuxt/kit": "^3.9.3",
|
"@nuxt/kit": "^3.9.3",
|
||||||
"@vueuse/core": "^10.7.2",
|
"@vueuse/core": "^10.7.2",
|
||||||
"defu": "^6.1.4",
|
"defu": "^6.1.4",
|
||||||
|
|||||||
@ -1,11 +1,17 @@
|
|||||||
import mongoose from 'mongoose'
|
import mongoose from 'mongoose'
|
||||||
import type { DevtoolsServerContext, ServerFunctions } from '../types'
|
import type { DevtoolsServerContext, ServerFunctions } from '../types'
|
||||||
|
import { logger } from '@nuxt/kit'
|
||||||
|
|
||||||
import { setupDatabaseRPC } from './database'
|
import { setupDatabaseRPC } from './database'
|
||||||
import { setupResourceRPC } from './resource'
|
import { setupResourceRPC } from './resource'
|
||||||
|
|
||||||
export function setupRPC(ctx: DevtoolsServerContext): ServerFunctions {
|
export function setupRPC(ctx: DevtoolsServerContext): ServerFunctions {
|
||||||
mongoose.connect(ctx.options.uri, ctx.options.options)
|
if (!ctx.options.uri) {
|
||||||
|
ctx.options.uri = ''
|
||||||
|
logger.warn('MongoDB autoconnect is disabled, configure `uri` to enable.')
|
||||||
|
} else {
|
||||||
|
mongoose.connect(ctx.options.uri, ctx.options.options)
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
getOptions() {
|
getOptions() {
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import { useRuntimeConfig } from '#imports'
|
|||||||
export async function defineMongooseConnection({ uri, options }: { uri?: string; options?: ConnectOptions } = {}): Promise<void> {
|
export async function defineMongooseConnection({ uri, options }: { uri?: string; options?: ConnectOptions } = {}): Promise<void> {
|
||||||
const config = useRuntimeConfig().mongoose
|
const config = useRuntimeConfig().mongoose
|
||||||
const mongooseUri = uri || config.uri
|
const mongooseUri = uri || config.uri
|
||||||
|
if (!(mongooseUri as string).trim()) return
|
||||||
const mongooseOptions = options || config.options
|
const mongooseOptions = options || config.options
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user