दिलचस्प पोस्ट
जावा मुख्य कक्षा में मुख्य () विधि की आवश्यकता क्यों है कैसे सी में एक सरणी से एक तत्व को हटाने के लिए नया पूर्णांक बनाम मानऑफ़ जांचें कि स्ट्रिंग में केवल अंक होते हैं स्ट्रॉटोक देय विभाजन दोष JSF 1.2 में EL द्वारा मापदंडों के साथ तरीकों को शामिल करना फ्लोट के रूपांतरण / प्रिंट करने के लिए डबल से इंट को कैसे नियंत्रित किया जाता है? अजगर ओपनसीव समाधान पीएनपी गलत अनुवाद वेक्टर पैदा करता है स्थिरता ओवरलोडिंग परिणामस्वरूप अपवाद – परिणाम सेट की शुरुआत से पहले रेजर दृश्य में स्ट्रिंग प्रक्षेप? मैं जीसीसी को फ़ंक्शन को कैसे इनलाइन करने के लिए बाध्य कर सकता हूं? वेब एपीआई में कई फिल्टर के साथ निष्पादन का आदेश अंत में ब्लॉक में अपवाद फेंकता Django: एक ऐप टेम्पलेट ओवरराइड और विस्तार

क्या मोमोज़ त्रुटि है, ऑब्जेक्ट को हटा दें, पथ "_id" पर मूल्य XXX के लिए असफल?

जब /customers/41224d776a326fb40f000001 लिए कोई अनुरोध भेजना और /customers/41224d776a326fb40f000001 साथ एक दस्तावेज़ मौजूद नहीं है, तो doc null और मैं 404 लौट रहा हूं:

  Controller.prototype.show = function(id, res) { this.model.findById(id, function(err, doc) { if (err) { throw err; } if (!doc) { res.send(404); } return res.send(doc); }); }; 

हालांकि, जब _id GET /customers/foo साथ उदाहरण के लिए "फॉर्मेट" (मुझे लगता है) के रूप में मोंगोज़ की अपेक्षा है, तो _id मेल नहीं खाता है, तो एक अजीब त्रुटि लौटाई गई है:

CastError: वस्तु के लिए कास्ट करें पथ "_id" पर मान "foo" के लिए विफल

तो यह त्रुटि क्या है?

Solutions Collecting From Web of "क्या मोमोज़ त्रुटि है, ऑब्जेक्ट को हटा दें, पथ "_id" पर मूल्य XXX के लिए असफल?"

Mongoose की findById पद्धति id पैरामीटर को मॉडल के _id फ़ील्ड के प्रकार के लिए डाले, ताकि वह मेलिंग डॉक्टर के लिए ठीक से क्वेरी कर सके। यह एक ऑब्जेक्ट ईडी है, लेकिन "foo" एक मान्य ऑब्जेक्ट आईडी नहीं है, इसलिए कलाकारों में विफल रहता है।

यह 41224d776a326fb40f000001 साथ नहीं होता है क्योंकि वह स्ट्रिंग एक मान्य ऑब्जेक्ट है।

इसका समाधान करने का एक तरीका यह है कि यह देखने के लिए कि क्या id एक मान्य ऑब्जेक्ट है या ऐसा नहीं है, तो अपने findById कॉल से पहले एक चेक जोड़ना है:

 if (id.match(/^[0-9a-fA-F]{24}$/)) { // Yes, it's a valid ObjectId, proceed with `findById` call. } 

ऑब्जेक्ट की जाँच के लिए मौजूदा फ़ंक्शन का उपयोग करें

 var mongoose = require('mongoose'); mongoose.Types.ObjectId.isValid('your id here'); 

क्या आप उस स्ट्रिंग को ObjectId रूप में पार्स कर रहे हैं?

मेरे आवेदन में, मैं क्या करता हूं:

 ObjectId.fromString( myObjectIdString ); 

आप ObjectId.isValid का भी निम्न उपयोग कर सकते हैं:

 if (!ObjectId.isValid(userId)) return Error({ status: 422 }) 

मैं @ गस्टावोनेके समाधान के अनुकूलन के साथ गया, ऑब्जेक्ट आईडी का सत्यापन विधि के रूप में विफलता का लाभ उठाने के लिए मूल कोड के चारों ओर लपेटे गए एक प्रयास-पकड़ में ऑब्जेक्ट आईडी को लागू करना

 Controller.prototype.show = function(id, res) { try { var _id = mongoose.Types.ObjectId.fromString(id); // the original code stays the same, with _id instead of id: this.model.findById(_id, function(err, doc) { if (err) { throw err; } if (!doc) { res.send(404); } return res.send(doc); }); } catch (err) { res.json(404, err); } }; 

या आप यह कर सकते हैं

var ObjectId = require('mongoose').Types.ObjectId; var objId = new ObjectId( (param.length < 12) ? "123456789012" : param );

जैसा कि यहां बताया गया है कि मोंगोज़ के पास $ या शर्त के साथ पद्धति मिलती है ठीक से काम नहीं करती

यह एक पुराना सवाल है लेकिन आप अनुरोध पैरामीटर की जांच के लिए एक्सप्रेस-वैदिकक पैकेज का भी उपयोग कर सकते हैं

एक्सप्रेस-वैद्येटर संस्करण 4 (नवीनतम):

 validator = require('express-validator/check'); app.get('/show/:id', [ validator.param('id').isMongoId().trim() ], function(req, res) { // validation result var errors = validator.validationResult(req); // check if there are errors if ( !errors.isEmpty() ) { return res.send('404'); } // else model.findById(req.params.id, function(err, doc) { return res.send(doc); }); }); 

एक्सप्रेस- सत्यापनकर्ता संस्करण 3:

 var expressValidator = require('express-validator'); app.use(expressValidator(middlewareOptions)); app.get('/show/:id', function(req, res, next) { req.checkParams('id').isMongoId(); // validation result req.getValidationResult().then(function(result) { // check if there are errors if ( !result.isEmpty() ) { return res.send('404'); } // else model.findById(req.params.id, function(err, doc) { return res.send(doc); }); }); });