express-mongoose-loader

1.0.3 • Public • Published

Express Mongoose Loader

Create MongoDB models loaders scripts for your express app, saving you thoses numerous database requests.

Installation

$ npm install express-mongoose-loader

Usage

First call for express-mongoose-loader to set up loading system.

app.use(require('express-mongoose-loader'));

Then, create a mongoose model loader by requesting mongoose id list to load with the function req.requestList(listName). Add item's data into the object req.db[listName] created by express-mongoose-loader.

import mongoose from 'mongoose';
import Article from './model/article';
 
let articlesLoaders = (req, res , next) => {
  Article.find(
    {
      _id: { $in: req.requestList('articles') }
    },
    (err, docs) => {
      if (!err && docs) {
        for (const doc of docs) {
          req.db.articles[doc.id] = {
            title: doc.title,
            datetime: doc.datetime,
            content: doc.content
          };
        }
      }
      next();
    }
  );
}

Request model's item loading by calling the function req.load(id).

req.load('57f0c59a779f68ea0a70a4e2');

After requesting a load you must call your model loader middleware.

app.use(articlesLoaders);

Example App

/* Init your express app */
import express from 'express';
 
import mongooseLoader from 'express-mongoose-loader';
 
import mongoose from 'mongoose';
mongoose.connect(/* DB config */);
 
const app = express();
app.listen(8080);
 
app.use(mongooseLoader);
 
/* Create a basic mongoose model */
var ArticleSchema = new mongoose.Schema({
  title: String,
  datetime: Date,
  content: String
});
const Article = mongoose.model('article', ArticleSchema);
 
/* Create a basic mongoose loader */
let articlesLoaders = (req, res, next) => {
  Article.find(
    {
      _id: { $in: req.requestList('articles') }
    },
    (err, docs) => {
      if (!err && docs) {
        for (const doc of docs) {
          req.db.articles[doc.id] = {
          title: doc.title,
          datetime: doc.datetime,
          content: doc.content
          };
        }
      }
      next();
    }
  );
}
 
/* Create a basic articles loader middleware */
let loadArticles = (req, res, next) => {
  Article.find(
    {
      public: true
    },
    (err, articles) => {
      if (!err && articles) {
        for (const article of articles) {
          /* Ask for article data loading */
          req.load('articles', article.id);
        }
      }
    }
  );
}
 
/* Basic index page */
app.use([loadArticles, articlesLoaders]);
app.get('/',
  (req, res) => {
    let content = '';
    for (const article of req.db.articles) {
      content += '<h1>' + article.title + '</h1><br />';
    }
    res.send(content);
  }
);

License

This project is licensed under the MIT license.

Package Sidebar

Install

npm i express-mongoose-loader

Weekly Downloads

0

Version

1.0.3

License

MIT

Unpacked Size

5.84 kB

Total Files

4

Last publish

Collaborators

  • dimitrinicolas
  • dimou