Using OOP with NodeJS and mongoose instead of callback hell.
I am using the following class.
Notice that I use getMember() with a callback. I wonder How can I bind it to callBack(err) properly without inside functions.
My expected result would be:
getMember(req, res) {
var memberId = req.params.id;
Member.findById(memberId, this.callBack);
}
enter code here
This is my class:
'use strict';
var mongoose = require('mongoose'),
Member = mongoose.model('Members');
class Members {
constructor(router) {
this.router = router;
this.registerRoutes();
}
callBack(err, task) {
if(err)
res.send(err);
res.json(task);
}
registerRoutes() {
this.router.get('/members', this.list_all_members.bind(this));
this.router.get('/members/:id', this.getMember.bind(this));
this.router.post('/members', this.create_a_member.bind(this));
}
getMember(req, res) {
var memberId = req.params.id;
Member.findById(memberId, function(err, task) {
if(err)
res.send(err);
else
res.json(task);
});
}
}
module.exports = Members;
Solution:
I came up with a solution.
My constructor function:
constructor() {
this.callBack = (err, task, res) => {
if(err)
res.send(err);
res.json(task);
}
}
My callback using mongoose:
select(req, res) {
// schemaDB is the mongoose schema.
schemaDB.find({}, (err, task) => { this.callBack(err, task, res) } );
}