Fastify MongoDB Plugin using Mongoose ODM
Installation
npm i fastify-mongoose-driver -s
Usage
fastify.register(
require("fastify-mongoose-driver").plugin,
{
uri: "mongodb://admin:pass@localhost:27017/database_name",
settings: {
useNewUrlParser: true,
config: {
autoIndex: true,
},
},
models: [
{
name: "posts",
alias: "Post",
schema: {
title: {
type: String,
required: true,
},
content: {
type: String,
required: true,
},
author: {
type: "ObjectId",
ref: "Account",
validateExistance: true,
},
},
},
{
name: "accounts",
alias: "Account",
schema: {
username: {
type: String,
},
password: {
type: String,
select: false,
required: true,
},
email: {
type: String,
unique: true,
required: true,
validate: {
validator: (v) => {
return /^.+@.{2,}\..{2,}$/.test(v);
},
message: (props) => `${props.value} is not a valid email!`,
},
},
createdAtUTC: {
type: Date,
required: true,
},
},
virtualize: (schema) => {
schema.virtual("posts", {
ref: "Post",
localKey: "_id",
foreignKey: "author",
});
},
},
],
useNameAndAlias: true,
},
(err) => {
if (err) throw err;
}
);
fastify.get("/", (request, reply) => {
console.log(fastify.mongoose.instance);
console.log(fastify.mongoose.Account);
});
require("fastify-mongoose-driver").decorator();
Options
Option | Description |
---|
uri | Required, the Unique Resource Identifier to use when connecting to the Database. |
settings | Optional, the settings to be passed on to the MongoDB Driver as well as the Mongoose-specific options. Refer here for further info. |
models | Optional, any models to be declared and injected under fastify.mongoose |
useNameAndAlias | Optional, declares models using mongoose.model(alias, schema, name) instead of mongoose.model(name, schema) |
Any models declared should follow the following format:
{
name: "profiles",
alias: "Profile",
schema: schemaDefinition
class: classDefinition
}
The schemaDefinition
variable should be created according to the Mongoose Model Specification.
The classDefinition
variable should be created according to the Mongoose Class Specification.
Author
Alex Papageorgiou
License
Licensed under GPLv3.