2016-08-24 8 views
0

私はMongooseモデルを持っています。マングースfindByIdプロパティが存在するかどうかをチェック

var Schema = new Schema({ 
    title: { type: String, required: true }, 
    subtitle: { type: String, required: true }, 
    text: { type: String, required: true }, 
    image: { data: Buffer, contentType: String, name: String, size: Number, encoding: String } 

});

私は、私はそれを示すエラーがプロパティを読み取ることができないと問題がレコードに格納されているいかなる画像プロパティがないです取得

let projection = "image"; 
Model.findById(req.params.id,projection, function (err, doc) { 
    console.log(err); 
    if (err) { 
    res.status(422).json(err); 
    } 
    else { 
    res.contentType(doc.image.contentType); 
    res.send(doc.image.data); 
    } 
}); 

を行います。どのように私はこれを無視することができます、画像が格納されているかどうかは重要ではありません。

Thanx事前に。 :-)

答えて

1

docundefinedの場合、コールバックをチェックインできます。そうであれば、他のメッセージ/ステータスを返し、そうでなければイメージを返す。例については

Model.findById(..., function(err, doc) { 
    if (err) {...} 
    else if (doc.image) {<return the image here>} 
    else {<return a no image found message>} 
} 

それは(doc.image)チェックが失敗する原因となる空の配列/オブジェクトを返すことが可能ですので、さらに安全のために、あなたはおそらく、docが最初に定義されていることを確認する必要があります。

+0

を試してみて、私はちょうどこれを実現、ありがとうございます。文書が存在するかどうかを確認する必要がありますか?それは私の最初の誤りチェック声明でカバーされるべきではありませんか? – HenrikG

+0

いいえ、errはそれだけです。エラーが発生したため、dbやその他のエラーに接続できませんでした。すべて成功しても何も見つからない場合は、空の文書を返すだけです –

+0

別の質問です。イメージプロパティが見つからない場合、どのステータスコードを使用する必要がありますか?私はクライアント側でフェッチを使用しており、より多くの場所で同じステータスコードを使用する必要があることを理解しています。 – HenrikG

0

Model.findById({image:{ $exists: true}}... 
関連する問題