2016-06-16 6 views
0

私のアプリケーションでは、さまざまな種類のオブジェクト(物理ドライブ、デバイス、プロファイル、トピック、記事、メッセージ)に関連付ける機能を持つユーザーがいます。これらの関連付けはすべて、ユーザーモデルに基づいてユーザーオブジェクト内に格納されます。私が把握しようとしているのは、APIクエリーからの応答を、ユーザーがデバイスに関連しているという理由だけでシステムがユーザーに知っているすべてのものを返すことから新しいデバイスを作成するように制限する方法です。新しいデバイスを作成するNodeから返された応答をangular2アプリケーションに限定する方法を教えてください。

は次のようになります。

router.post('/', function(req, res, next) { 
var decoded = jwt.decode(req.query.token); 
User.findById(decoded.user._id, function(err, doc) { 
    if (err) { 
     return res.status(401).json({ 
      title: 'An Error occured', 
      error: err 
     }); 
    } 
    var device = new Device({ 
     model_name: req.body.model_name, 
     model_number: req.body.model_number, 
     serial_number: req.body.serial_number, 
     wwnn: req.body.wwnn, 
     user: doc 
     // topic: req.body.topicId // use this line for adding reference IDs if needed 
    }); 
    console.log(req.body); 
    console.log(' About to Save Device...'); 
    device.save(function(err, result){ 
     if (err) { 
      return res.status(404).json({ 
       title: 'An Error occured', 
       error: err 
      }); 
     } 
     doc.devices.push(result); 
     doc.save(); 
     res.status(201).json({ 
      device: 'Saved Device', 
      obj: result 
     }); 
    }); 
}); 
}); 

私のデバイスモデルのスキーマは次のようになります。

var schema = new Schema({ 
model_name: {type: String, required: false}, 
model_number: {type: String, required: false}, 
serial_number: {type: String, required: false, unique: true}, 
wwnn: {type: String, required: false}, 
user: {type: Schema.Types.ObjectId, ref: 'User'} 
}); 

そして、私のユーザモデルのスキーマは次のようになります。

var schema = new Schema({ 
password: {type: String, required: true}, 
email: {type: String, required: true, unique: true}, 
messages: [{type: Schema.Types.ObjectId, ref: 'Message'}], 
articles: [{type: Schema.Types.ObjectId, ref: 'Article'}], 
topics: [{type: Schema.Types.ObjectId, ref: 'Topic'}], 
profiles: [{type: Schema.Types.ObjectId, ref: 'Profile'}], 
devices: [{type: Schema.Types.ObjectId, ref: 'Device'}], 
physical_drives: [{type: Schema.Types.ObjectId, ref: 'Physical_drive'}] 
}); 

新しいデバイスを作成し、obj:resultを返すときはいつも:

res.status(201).json({ 
     device: 'Saved Device', 
     obj: result 
    }); 

私はこれを返します。これはユーザープロファイルの情報が多すぎます。代わりに、ユーザーオブジェクトの特定のフィールドのみを返すように制限したいと考えています。

{ 
"device": "Saved Device", 
"obj": { 
"__v": 0, 
"model_name": "MyGreatModelName", 
"model_number": "MyAwesomeModelNumber", 
"serial_number": "MyFantasticSerial2", 
"wwnn": "MyWorldWideNode", 
"user": { 
    "_id": "5755e5be96162f52a4f01dd8", 
    "firstName": "Jason", 
    "lastName": "Perr", 
    "password": "sha1$6a807c98$1$2cfa76795b63b23d7ae0fea1715156b3390293b9", 
    "email": "[email protected]", 
    "__v": 139, 
    "physical_drives": [ 
    "5761e971e8490444e4b78f23", 
    "5761eb35a6bfba5ae5ed2db0", 
    "5761fda47c754be2ebe5276c", 
    "5761fdd07c754be2ebe5276d" 
    ], 
    "devices": [ 
    "5761a1933509fb50b7a275cb", 
    "5761a33deb792d5db85e0f79", 
    "5761c8ce72318160d2ff99f9", 
    "5761cc19740a1a0fd4436ee5", 
    "5761fc1d7c754be2ebe5276a", 
    "5761fcef7c754be2ebe5276b", 
    "5762c3417c754be2ebe52774", 
    "5762c34c7c754be2ebe52775" 
    ], 
    "profiles": [ 
    "57608d27abcb9ee83dcfe9d3", 
    "5761875afb99e9b4a91af310", 
    "57618c3cfb99e9b4a91af311", 
    "57619bdffb99e9b4a91af313", 
    "5761afb6ecbd0581c0b95d0d", 
    "5761bc659084f6ffc803d928", 
    "5761bf0ac8ae3803cbbaf660", 
    "5761c073c8ae3803cbbaf664", 
    "5761c2f56400173cce830cb0", 
    "5761c8b072318160d2ff99f8" 
    ], 
    "topics": [ 
    "5755e71696162f52a4f01dde", 
    "57572d92e802307d199f0afa", 
    "57572da8e802307d199f0afb" 
    ], 
    "articles": [ 
    "5755e78a138e28f6a4fd34e7", 
    "5755ea7e138e28f6a4fd34e8", 
    "5755f8bddbce43cba958c23f", 
    "5755f919dbce43cba958c240", 
    "5755fa5d0a556423acedf0e2", 
    "5755fbec0a556423acedf0e3", 
    "5756f65f0a556423acedf0e4", 
    "5756f6d40a556423acedf0e5", 
    "57571989ab19798208f4e08e", 
    "5757198fab19798208f4e08f", 
    "575881f51ac787521d15ac29", 
    "575882071ac787521d15ac2a", 
    "575882dc1ac787521d15ac2b", 
    "5758b8c11ac787521d15ac36", 
    "5758b9731ac787521d15ac37", 
    "5758ba761ac787521d15ac38", 
    "5758bc391ac787521d15ac39", 
    "5758bce01ac787521d15ac3a", 
    "5758bd7e1ac787521d15ac3b", 
    "5758bdb51ac787521d15ac3c", 
    "5758be841ac787521d15ac3d", 
    "5758befd1ac787521d15ac3e", 
    "5758bfea1ac787521d15ac3f", 
    "5758c0c31ac787521d15ac40", 
    "5758c2e173fd33e04092c87e", 
    "575992d473fd33e04092c87f", 
    "5759956173fd33e04092c880", 
    "575995a073fd33e04092c881", 
    "57599bc573fd33e04092c882", 
    "57599f4c73fd33e04092c883", 
    "57599fe673fd33e04092c884", 
    "5759a07573fd33e04092c885", 
    "5759aace73fd33e04092c886", 
    "5759ab2673fd33e04092c887", 
    "5759ac3c73fd33e04092c888", 
    "5759acbd73fd33e04092c889", 
    "5759acdd73fd33e04092c88a", 
    "5759ad2673fd33e04092c88b", 
    "5759adc673fd33e04092c88c", 
    "5759ae6773fd33e04092c88d", 
    "5759af3b73fd33e04092c88e", 
    "5759b18073fd33e04092c88f", 
    "5759b2ad73fd33e04092c891", 
    "5759b45e73fd33e04092c892", 
    "5759b4b173fd33e04092c893", 
    "5759b59a73fd33e04092c894", 
    "575b6a67dd42b19c39dcfa77", 
    "575b6f6f03d2aa3d3c3e98f9", 
    "575b6ffb03d2aa3d3c3e98fa", 
    "575b70f5874fdbc63d317998", 
    "575b71c2874fdbc63d317999", 
    "575b723b874fdbc63d31799a", 
    "575b7468fd4302593f754eae", 
    "57606d125b7701e5346075aa", 
    "57606dba5b7701e5346075ab", 
    "57606e065b7701e5346075ac", 
    "57606e835b7701e5346075ad", 
    "57606edc5b7701e5346075ae", 
    "57606f1a5b7701e5346075af", 
    "5761824883f2a99ba5d3b071", 
    "5761829b83f2a99ba5d3b072", 
    "57619b8efb99e9b4a91af312" 
    ], 
    "messages": [ 
    "5755e5da96162f52a4f01dda", 
    "5755e6db96162f52a4f01ddb", 
    "5755e6e196162f52a4f01ddc", 
    "5755e70396162f52a4f01ddd", 
    "5759b1a973fd33e04092c890" 
    ] 
}, 
"_id": "5762c34c7c754be2ebe52775" 
} 
} 

これをどのように制限できますか?理想的には私が取得したいレスポンスがより次のようになります。

{ 
"device": "Saved Device", 
"obj": { 
    "__v": 0, 
    "model_name": "MyGreatModelName", 
    "model_number": "MyAwesomeModelNumber", 
    "serial_number": "MyFantasticSerial2", 
    "wwnn": "MyWorldWideNode", 
    "user": { 
    "_id": "5755e5be96162f52a4f01dd8", 
    "firstName": "Jason", 
    "lastName": "Perr", 
    "__v": 139, 
    "physical_drives": [ 
     "5761e971e8490444e4b78f23", 
     "5761eb35a6bfba5ae5ed2db0", 
     "5761fda47c754be2ebe5276c", 
     "5761fdd07c754be2ebe5276d" 
    ], 
    "devices": [ 
     "5761a1933509fb50b7a275cb", 
     "5761a33deb792d5db85e0f79", 
     "5761c8ce72318160d2ff99f9", 
     "5761cc19740a1a0fd4436ee5", 
     "5761fc1d7c754be2ebe5276a", 
     "5761fcef7c754be2ebe5276b", 
     "5762c3417c754be2ebe52774", 
     "5762c34c7c754be2ebe52775" 
    ], 
    }, 
    "_id": "5762c34c7c754be2ebe52775" 
} 
} 

答えて

0

あなたは常にカスタムオブジェクトを作成することができますが、それは多くの手作業となります。しかし、それはネットワークトラフィックが大きなパフォーマンス向上の原因になることは価値があります。 だから、これはあなたが常に結果の最初のvalを引っ張ってくるこの

res.status(201).json({ 
     device: 'Saved Device', 
     obj: { 
     Key1 : result.value1, 
     Key2 : result.value2 

} 
    }); 

など..

+0

は、あなたが言っていることresult.value1を行うことができます方法はありますか?そうでなければ、どうすればこれらのことが分かるでしょうか? – JasonPerr

関連する問題