我正在为转发部分编写带有express的nodeJS REST api服务器。现在服务器将做的部分是备份不同类型的数据,并且会有请求备份我支持的某些类型的数据以及我支持的所有请求。为了节省代码重复,我想只是从处理备份所有内容的请求中调用所有备份 - 个人 - 数据类型的函数。
各种类型的数据备份功能。
function verifyUserId(req, res, functionToGoTo) {
req.mongoClient.collection('syncServiceAccounts', checkForAccount = function (err, collection) {
collection.find({_id:req.objectID.createFromHexString(req.params.syncServiceUser)}).toArray(function (err, results) {
if (results.length != 0) {
functionToGoTo(req, res, results[0].share_key);
} else {
res.send(404);
}
});
});
};
//Set all server contacts as on device
exports.syncServiceContactsSync = function (req, res) {
console.log('syncServiceContactsSync');
verifyUserId(req, res, syncServiceContactsSync, sendContactsSyncResponse);
//verifyUserId(req, res, syncServiceContactsSync);
};
function syncServiceContactsSync(req, res, shareKey, callback) {
//function syncServiceContactsSync(req, res, shareKey) {
jsonObject = (req.body);
var jsonResponse = new Array();
req.mongoClient.collection('syncService_Contacts', insertSyncServiceUser = function (err, collection) {
collection.remove({share_key:shareKey});
for (var i = 0; i < jsonObject.length; i++) {
jsonObject[i].share_key = shareKey;
collection.insert(jsonObject[i]);
}
collection.find({share_key:shareKey}).toArray(function (err, results) {
for (var i = 0; i < results.length; i++) {
jsonResponse.push({contactID:results[i]._id});
}
//res.json(jsonResponse, 200);
callback();
});
});
};
function sendContactsSyncResponse() {
res.json(jsonResponse, 200);
}
在以下功能中,我希望能够只调用所有单独的备份类型。
//Set all server items as on the device
exports.syncServiceSync = function (req, res) {
console.log('syncServiceSync');
contactsObj = new Contacts();
contactsObj.syncService
};
我可以调用导出的syncServiceContacsSync,它是每种类型数据的等价物,但是当我可以从syncServiceSync执行一次时,我会验证每种新数据类型的userID。有没有办法做到这一点,并告诉syncServiceContactsSync插入数据后该做什么?它最好与jsonResponse一起发送到一个函数,在那里我将它级联到下一个数据类型。
另请注意,这两个文件块位于同一文件夹中的不同文件中。
编辑:使其更容易理解。我有一个系统将数据类型A,B,C备份到他们自己的mongo集合中。我的应用程序的注册用户有另一个集合。在请求方面,我有一些处理单独备份A,B,C和一个处理特定用户帐户的所有请求。在处理所有这些问题的那个中,我认为使用备份A,B,C的函数是个好主意,所以我没有代码重复。因此,我想要的东西(但最终可能以不同的方式实现)是,当我想备份所有数据类型时,我只需调用处理A的那个,然后级联到一个处理B,然后是C的那个。除了简单地级联到每个函数之外,我还想级联一些数据(资源ID,所以As的ID,进入处理Bs的函数,然后是ID A和B进入处理C的那个,然后进入一个返回所有这些ID的最终函数)。我遇到的问题是现在编写代码的方式,每次我级联时,我都会重新检查我是否可以在用户集合中找到用户,这只是有点愚蠢。
答案 0 :(得分:0)
我不太确定我是否完全理解您的问题,但是您是否已查看Route Middleware
路由可用的Express
?有关详细信息,请访问http://expressjs.com/guide.html#route-middleware。
它基本上允许您将逻辑插入到请求管道中,以便您可以在一个位置定义逻辑并将其用于多个路径。
function loadUser(req, res, next) {
// You would fetch your user from the db
var user = users[req.params.id];
if (user) {
req.user = user;
next();
} else {
next(new Error('Failed to load user ' + req.params.id));
}
}
app.get('/user/:id', loadUser, function(req, res){
res.send('Viewing user ' + req.user.name);
});