yamadapc / mongoose-private-paths Goto Github PK
View Code? Open in Web Editor NEWA simple mongoose plugin to provide private Schema keys
License: MIT License
A simple mongoose plugin to provide private Schema keys
License: MIT License
If you declare an schema such as:
var userSchema = new Schema({
username: String,
_password: String
})
That's perfectly valid for mongoose, toJSON
will show the field _password
because it's not detected properly in isPrivate
method.
Atm, this is the if
that fails:
else if(_.isObject(node) && !node.type && !node.getters) {
since node is the type String (internally that's a function) and underscore returns isObject as true.
Maybe the solution is like
else if(_.isObject(node) && !_.isFunction(node) && !node.type && !node.getters) {
Hi, first of all thanks for this module. It helps me a lot.
I just wanted to report that when nesting subdocument as specified in Mongoose Doc, the private properties of the subdocument are not removed as they should.
(pseudo code non tested)
var ChildSchema = mongoose.Schema({
privateProp: {type: String, private: true},
publicProp: String
});
var ParentSchema = mongoose.Schema({
parentPrivateProp: {type: String, private: true},
parentPublicProp: String,
embedChild: ChildSchema
});
var Parent = mongoose.model('Parent', ParentSchema);
var p = new Model({
parentPrivateProp: "hello",
parentPublicProp: "my name is",
embedChild: {
privateProp: "Slim",
publicProp: "Shady"
}
});
p.toJSON();
// returns
/*
{
parentPublicProp: "my name is",
embedChild: {
privateProp: "Slim",
publicProp: "Shady"
}
}
*/
// while it should return
/*
{
parentPublicProp: "my name is",
embedChild: {
publicProp: "Shady"
}
}
*/
I monkey patched the behavior in the nestedOmit() function by replacing
var p = paths[key],
t;
by:
var p, t;
if(_.isObject(paths.tree)){
p = paths.tree[key];
}
else{
p = paths[key];
}
I don't know if it's the proper way to do it and if it passes tests. I just came with this patch.
I may submit a PR later. For now I just wanted to let you know :)
The private paths from a populated Document will not omitted:
var mongoose = require('mongoose'),
privatePaths = require('mongoose-private-paths');
var UserSchema = new mongoose.Schema({
username: { type: String },
password: { type: String, private: true }
});
UserSchema.plugin(privatePaths);
var User = mongoose.model('User', UserSchema);
var ContentSchema = new mongoose.Schema({
whatever: { type: String },
creator: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }
});
ContentSchema.plugin(privatePaths);
var Content = mongoose.model('Content', ContentSchema);
Content.findOne({}).populate('creator').exec(function(err, result) {
result.toJSON();
/* returns =>
{
_id: 54f987cb84b425481a7a211a,
whatever: 'foobar',
creator:
{ _id: 54f987c784b425481a7a2119,
username: 'Bob',
password: 'secret',
__v: 0 },
__v: 0 }
*/
});
For my use case works this quick patch: 7cda86c. But yet there is no test etc.
Mixing select
with other query operators should be able to handle this. We can either only export a "query modifier" (for an example of such thing see this) or a full query factory.
var mongoose = require('mongoose'),
privatize = require('mongoose-private-paths');
var Schema = mongoose.Schema;
var SomethingSchema = new Schema({
nested: [{
something: { type: String },
wat: { type: String, private: true }
}]
});
SomethingSchema.plugin(privatize);
var Something = mongoose.model('Something', SomethingSchema);
var something = new Something({
nested: [
{
something: 'yey',
wat: 'I shouldn\'t be here'
}
]
});
something.toJSON();
// should yield =>
// {
// nested: [
// {
// something: 'yey'
// }
// ]
// }
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.