egurb
egurb

Reputation: 1216

Function is not defined - module.exports - Express

I have a strange behavior in my Express app which I cannot understand. I have a user model file (user.js) which contains some schemas and some functions. When I require the file from my routes file (users.js) I can access Schemas but cannot call functions as they return 'myFunc is not a function'. This happens only in case I have multiple schemas, in case of one schema everything is perfect. Could you please help me to figure out?

This one returns: userModels.User.addUser is not a function

user.js

...
const UserModels = module.exports = {
    'User': mongoose.model('User', UserSchema),
    'Token': mongoose.model('Token', TokenSchema)
}

module.exports.addUser = function(newUser, callback){
    console.log('test');
}
...

users.js

...
userModels.User.addUser(newUser, function(err, user){
    if(err){
        res.json({success: false, msg: "Failed to register."});
    } else{
        res.json({success: true, msg: 'User has been registered'});
    }
});
...

This one passes:

...

const User = module.exports = mongoose.model('User', UserSchema);

module.exports.addUser = function(newUser, callback){
    console.log('test');
}

...

User.addUser(newUser, function(err, user){
    if(err){
        res.json({success: false, msg: "Failed to register."});
    } else{
        res.json({success: true, msg: 'User has been registered'});
    }
});

...

Upvotes: 0

Views: 732

Answers (1)

egurb
egurb

Reputation: 1216

So I solved the issue with the following:

User.js

UserSchema.statics.addUser = function(newUser, callback){

    console.log('test');

}

module.exports = {
    'User': mongoose.model('User', UserSchema),
    'Token': mongoose.model('Token', TokenSchema)
};

And in users.js I can access both models and it's methods like this:

const UserModels = require("../models/user");

UserModels.User;
UserModels.Token;
UserModels.User.AddUser();

Thanks.

Upvotes: 1

Related Questions