[mongodb] Mongoose 오류가 무엇입니까? "_id"경로에서 값이 XXX 인 경우 ObjectId로 전송하지 못했습니다?



4 Answers

기존 함수를 사용하여 ObjectID를 확인하십시오.

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

/customers/41224d776a326fb40f000001 요청을 보내고 _id 41224d776a326fb40f000001 이있는 문서가 없으면 docnull 이고 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 가 Mongoose가 "format"(예를 들어 GET /customers/foo )과 같이 기대하는 것과 일치하지 않으면 이상한 오류가 반환됩니다.

CastError : "_id"경로에서 "foo"값에 대해 ObjectId에 대한 캐스팅이 실패했습니다.

그러면이 오류가 무엇입니까?




다음과 같이 ObjectId.isValid를 사용할 수도 있습니다.

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



나는 라우터를 다음과 같이 선언했기 때문에이 문제에 직면했다.

router.put('/:id', async (req, res) => {
   // code ....
}

URL ie로 데이터를 업데이트 중이었습니다.

http://localhost:3000/id=5af584ebb62aae2fa8e406a2

오랜 시간을 보낸 후에 id= 를 제거하여 나 자신을 바로 잡습니다.

바른 길은 :

http://localhost:3000/5af584ebb62aae2fa8e406a2

이제 findById() 과 같이 사용할 수 있습니다.

let myModel = await Model.findById(req.params.id);



 if(mongoose.Types.ObjectId.isValid(userId.id)) {
        User.findById(userId.id,function (err, doc) {
            if(err) {
                reject(err);
            } else if(doc) {
                resolve({success:true,data:doc});
            } else {
                reject({success:false,data:"no data exist for this id"})

            }
        });
        } else {
            reject({success:"false",data:"Please provide correct id"});
        }

가장 좋은 것은 유효성을 확인하는 것입니다.






Related