使用NodeJS类与Mongoose时如何避免回调嵌套问题?
使用NodeJS和Mongoose的面向对象编程替代回调地狱
最近我在做NodeJS + Mongoose的面向对象开发,想摆脱回调地狱的困扰。我现在用的是下面这个类,注意看getMember()方法里我用了内部回调函数,我想知道怎么不用内部函数,直接把this.callBack正确绑定进去,就像我期望的实现效果这样:
getMember(req, res) { var memberId = req.params.id; Member.findById(memberId, this.callBack); }
我的类代码如下:
'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;
解决方案:
后来我自己琢磨出了一个可行的方案:
我的构造函数改成这样:
constructor() { this.callBack = (err, task, res) => { if(err) res.send(err); res.json(task); } }
对应的Mongoose回调写法调整为:
select(req, res) { // schemaDB is the mongoose schema. schemaDB.find({}, (err, task) => { this.callBack(err, task, res) } ); }
内容的提问来源于stack exchange,提问作者JustDeveloper
相关产品推荐
相关产品推荐

