Я пишу RI-сервер nodeJS REST с Express для пересылки.Теперь часть того, что будет делать сервер, - это резервирование различных типов данных, и будут запросы на резервное копирование определенных типов данных, которые я буду поддерживать, и все запросы, которые я поддерживаю.Чтобы сэкономить на дублировании кода, я думал о том, чтобы просто вызвать все функции резервного копирования отдельных типов данных из запроса, который касается резервного копирования всего.
Индивидуальный тип функций резервного копирования данных.
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 и его эквиваленты для каждого типа данных, но затем я бы проверил userID для каждого нового типа данных, когда я мог сделать это один раз из syncServiceSync.Есть ли способ сделать это, и сказать syncServiceContactsSync, что делать, когда он вставил данные?Предпочтительно, чтобы она шла к функции вместе с jsonResponse, где я бы каскадировал ее в следующий тип данных.
Также отметим, что два блока файлов находятся в разных файлах в одной папке.
РЕДАКТИРОВАТЬ: чтобы было легче понять.У меня есть система, которая выполняет резервное копирование типов данных A, B, C в свои собственные коллекции монго.У меня есть другая коллекция для зарегистрированных пользователей для моего приложения.Что касается запросов, у меня есть некоторые, которые имеют дело с резервным копированием A, B, C по отдельности, и одна, которая касается всех из них для конкретной учетной записи пользователя.В том, что касается всех из них, я подумал, что было бы неплохо использовать функции, которые поддерживают A, B, C, чтобы у меня не было дублирования кода.В результате я хотел бы (но это могло бы быть реализовано по-другому), чтобы когда я хотел сделать резервную копию всех типов данных, я бы просто вызвал тот, который имеет дело с A, и затем каскадом перешел к одномукоторый имеет дело с B, а затем с C. Помимо простого каскадирования в каждую функцию, я также хотел бы каскадировать некоторые данные (идентификатор ресурса, то есть идентификаторы As, в функцию, которая работает с B, затем идентификаторыA и B в тот, который имеет дело с C, а затем в конечную функцию, которая возвращает все эти идентификаторы).Проблема, с которой я столкнулся, заключается в том, что при написании кода теперь каждый раз, когда я каскадируюсь, я проверяю, могу ли я найти пользователя в коллекции пользователей, и это просто глупо.