私は、転送部分のexpressとnodeJS REST APIサーバーを作成しています。サーバーが行うことの一部は、さまざまな種類のデータをバックアップすることです。サポートする特定の種類のデータと、サポートしているすべての要求をバックアップする要求があります。コードの重複を節約するため、私はすべてのバックアップを処理する要求からすべてのbackup-individual-types-of-data関数を呼び出すことを考えていました。NodeJSサーバーのコールバック
データバックアップ機能の個々のタイプ。
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から一度それを行うことができたとき、私は、データのそれぞれの新しいタイプのユーザーIDを確認したいです。それを行う方法はありますか?syncServiceContactsSyncにデータを挿入したらどうするか教えてください。それは、jsonResponseと一緒に次のデータ型にカスケードする関数に行くことが好ましいでしょう。
また、2つのファイルブロックが同じフォルダ内の異なるファイルに存在することにも注意してください。
編集:わかりやすくするために。私はデータ型A、B、Cを自分のmongoコレクションにバックアップするシステムを持っています。私は私のアプリの登録ユーザーのための別のコレクションを持っています。リクエストに関しては、A、B、Cを個別にバックアップするものと、特定のユーザーアカウントのすべてを処理するものがあります。それらすべてを扱うものでは、A、B、Cをバックアップする関数を使うのは良い考えだと思ったので、コードの重複はありません。その結果、私が好きなもの(しかし、別の方法で実装されてしまうかもしれません)は、すべてのデータタイプをバックアップしたいときは、単にAを扱うものを呼び出して、そのデータ型にカスケードしますBを扱うものとCを持つものを扱うものです。単に各関数にカスケードするだけでなく、いくつかのデータ(リソースID、AsのID、Bsを扱う関数にカスケードし、次にIDのID AとBをCを扱うものに変換し、最後にこれらのIDをすべて返す関数に変換します)。私が持っている問題は、カスケードするたびにコードが書かれているということです。私はユーザコレクション内でそのユーザを見つけることができるかどうか再確認したいと思います。それはちょっとばかげたことです。
もしそうなった場合は、これをあなたの質問の回答としてマークしてください。 – Bill
うん、そうです、心配しないでください。 –
@Billあなたの例から、次の(新しいエラー(...))がapp.get( '/ user /:id')関数にどのように流入するのかは明らかではありません。 next()に渡されたエラーを取得するにはどうすればよいですか?この例で言及されていることを見るとよいでしょう。 – titusmagnus