我正在寻找一个包(或模式)来处理来自 mongodb 的事件,这样我就可以避免嵌套回调并将 mongodb 逻辑排除在我的请求处理程序之外。
现在我的代码看起来像这样:
start-express.js(服务器)
var express = require('express');
var Resource = require('express-resource');
var app = express.createServer();
// create express-resource handler which essentially does app.get('things', ...)
var things = app.resource('things', require('./things.js'));
app.listen(port);
things.js(快速资源请求处理程序)
require('./things-provider');
// handle request 'http://example.com/things'
exports.index = function(request, response) {
sendThings(db, response);
};
things-provider.js(处理 mongodb 查询)
var mongodb = require('mongodb')
// create database connection
var server = new mongodb.Server(host, port, {auto_reconnect: true});
var db = new mongodb.Db(dbName, server);
db.open(function (err, db) {
if (err) { }
// auto_reconnect will reopen connection when needed
});
function sendThings(db, response) {
db.collection('things', function(err, collection) {
collection.find(function(err, cursor) {
cursor.toArray(function(err, things) {
response.send(things);
});
});
});
}
module.exports.sendThings = sendThings;
我想避免将我的 http 响应对象传递给我的数据库处理程序,或者(更糟)在我的 http 响应处理程序中处理我的 db 请求。
我最近意识到我想要做的是创建一个事件处理程序,它注册一个 http 请求/响应并在处理和发送 http 响应之前等待来自数据库的响应(事件)。
这听起来像是 node.js 已经做的很多重复。是否存在处理此用例的现有框架?