Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

mongoose-hook

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

mongoose-hook

Abstract mongoose plugin, allowing usage of 'pre' and 'post' hooks on internal direct wrappers to database API for all (including static) mongoose operations.

  • 0.1.5
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
1K
decreased by-5.08%
Maintainers
1
Weekly downloads
 
Created
Source

mongoose-hook

Abstract mongoose plugin, allowing usage of 'pre' and 'post' hooks on internal direct wrappers to database API for all (including static) mongoose operations.

Installation

git clone git@github.com:tarquas/mongoose-hook.git mongoose-hook

Package

{
  "mongoose-hook": "tarquas/mongoose-hook#40df5bac52"
}

Usage

Example: A plugin to mark every new document with some watermark (uses pre 'insert' hook):

mongoose-watermark.js

'use strict';

var
  hookPlugin = require('./mongoose-hook'),
  thisPlugin = {};

thisPlugin.pre = function(p, callback) {
  if (p.insert) {
    p.insert[this.watermarkPath] = this.watermarkValue;
  }

  callback();
};

module.exports = function(schema, opts) {
  schema.plugin(hookPlugin, {
    mongoose: opts.mongoose,
    pre: thisPlugin.pre,
    watermarkPath: opts.path || 'watermark',
    watermarkValue: opts.value
  });
};

Usage of plugin: adds a field to every new document, specifying which process ID created it:

watermark-example.js

var
  mongoose = require('mongoose'),
  watermarkPlugin = require('./mongoose-watermark');
  
mongoose.plugin(watermarkPlugin, {
  mongoose: mongoose,
  path: 'createdByProcess',
  value: process.pid
});

Notes

  • Hook plugin must be provided with an exact instance of mongoose, where the processing models expected to be processed in opts parameter. The plugin correctly handles the hooking on multiple mongoose instances.

  • Comparing the code above with the following:

schema.post('save', function(next) {
  this.createdByProcess = process.pid;
  next();
});

The difference is that post 'save' hook is not called for Model.create(...) method; the post 'insert' hook is called in either case, because mongoose calls underlying insert wrapper of database API anyway. Also, in example above p.insert may also refer to $setOnInsert object on upsert operation.

  • this object, which is passed to hook function is an instance of mongoose.Collection. Please, refer to mongoose manuals for its API. Also, this plugin adds getModel() method to mongoose.Collection prototype, which returns a Model (made by mongoose.model()), which refers to given mongoose.Collection instance.

Keywords

FAQs

Package last updated on 08 May 2015

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc