Mongoose Plugin for Fastify
const Fastify = require('fastify');\nconst fp = require('fastify-plugin');\nconst mongoose = require('mongoose');\n\n// Mongoose plugin\nasync function mongoosePlugin(fastify, opts) {\n const uri = opts.uri || process.env.MONGO_URI || 'mongodb://localhost:27017/myapp';\n\n await mongoose.connect(uri);\n\n // Define models\n const userSchema = new mongoose.Schema({\n name: { type: String, required: true },\n email: { type: String, required: true, unique: true },\n createdAt: { type: Date, default: Date.now },\n });\n\n const User = mongoose.model('User', userSchema);\n\n // Decorate with models\n fastify.decorate('models', { User });\n\n fastify.addHook('onClose', async () => {\n await mongoose.disconnect();\n });\n}\n\napp.register(fp(mongoosePlugin, { name: 'mongoose' }));\n\n// Usage\napp.get('/api/users', async (request) => {\n const users = await app.models.User\n .find()\n .select('-__v')\n .sort({ createdAt: -1 })\n .lean();\n\n return { data: users };\n});
Examples
const Fastify = require('fastify');
const fp = require('fastify-plugin');
const mongoose = require('mongoose');
const app = Fastify({ logger: true });
const mongoosePlugin = fp(async (fastify) => {
await mongoose.connect(process.env.MONGO_URI || 'mongodb://localhost:27017/test');
const itemSchema = new mongoose.Schema({
name: { type: String, required: true },
price: { type: Number, min: 0 },
inStock: { type: Boolean, default: true },
});
fastify.decorate('Item', mongoose.model('Item', itemSchema));
fastify.addHook('onClose', () => mongoose.disconnect());
});
app.register(mongoosePlugin);
app.get('/items', async (request) => {
const { minPrice, maxPrice, inStock } = request.query;
const filter = {};
if (minPrice || maxPrice) {
filter.price = {};
if (minPrice) filter.price.\$gte = Number(minPrice);
if (maxPrice) filter.price.\$lte = Number(maxPrice);
}
if (inStock !== undefined) filter.inStock = inStock === 'true';
return app.Item.find(filter).sort({ name: 1 }).lean();
});
app.listen({ port: 3000 });