2017-08-31 14 views
0

私はソーシャルネットワーキングプロジェクトに取り組んでいます。イメージをアップロードする機能とDBからイメージオブジェクトを返すことができるAPIルートを追加して、それらを表示できるようにしました。これはうまくいきました。それから数日はかかりました(新しいゲームが出てきました)。だからここparamを使用した高速ルートが矛盾しています。それは私のコードですか?

はルートです:

router.get("/image/all/:id", function(req, res, next) { 
    console.log("Triggered: Images/all/ID"); 
    Image.find({owner_id: req.params.id}).populate("comments").exec(function(err, images) { 
    if(err) { 
     req.flash('error', err.toString()); 
     return next(); 
    } else { 
     console.log("images API trigger"); 
     res.json(images); 
     return next(); 
    } 
    }); 
}); 

そしてここでは、AJAX呼び出しです:

$.ajax({url: "/image/all/" + uid, success: function(data) { 

for(let i = 0; i < data.length; i++){ 
    let img = "<a class='aPic' href='#' data-toggle='modal' data-target='.view-image-modal' data-id='" + data[i]._id + "'> <img src='" + data[i].thumb + "' class='thumbnail pull-left'></a>"; 
    $('#proBox').append(img); 
    imageData.push(data[i]); 
} 

$('.view-image-modal').on('show.bs.modal', function(e) { 
    var button = $(e.relatedTarget); 
    var id = button.data('id'); 
    var image; 
    for(let i = 0; i < imageData.length; i++) { 
    console.log(imageData[i]._id + " | " + id); 
    let imId = imageData[i]._id.toString(); 
    if(imId == id){ 
     image = imageData[i]; 
     console.log("Found: " + imageData[i].file); 
    } 
    } 
    let splt = image.file.split("."); 
    let ext = "." + splt[splt.length - 1]; 
    $('.modal-content img').attr('src', "/images/uploads/" + id + ext); 
    $('.modal-title').html("Uploaded: " + moment(image.created).format("MM/DD/YYYY")); 
    $('#imgDesc').val(image.description); 

    $('#imgEdit-button').attr('data-id', id); 
    $('#imgDelete-button').attr('data-id', id); 
    //Update comments section 
}); 

}});

だから私はこのURLを取得:http://127.0.0.1:8080/image/all/5989da1afdc58624a0b10fda

コンソールがエラー404を与え、私はアドレスバーにこれを置けば、私は、私はIDからの手紙を追加または削除する場合は、「...取得することはできません」を取得それは想定されているように配列を返します。

シークレットウィンドウでこれを試して、キャッシュされたファイルの問題などがないことを確認しました。何か案は?

+0

req.flashがどのように機能するのかはわかりませんが、エラーが発生した場合は、次に電話します。私はあなたがそうし、エラーハンドラを持っていないと思う場合、404を取得します。エラーの場合、 'return next()'の代わりに 'res.json(err)'を返してみてください。なぜそれが失敗しているのか。たぶん_idがひどく形成されていて、マングースがそれを拒絶しているのかもしれません。 –

+0

GENIUS !!!ありがとう、私はそれがそのように設定していたことを忘れていた。私は人口( "コメント")を追加し、それのためのマングースモデルを呼び出さなかったことを忘れた。 – BackWoodsCoder

+0

あなたが答えとしてそれを提出すれば、私はそれを正しいとマークし、感謝します。 – BackWoodsCoder

答えて

0

上記のコードでは、エラーが発生した場合、next()に電話します。エラーハンドラがない場合は、404を取得します。エラーの場合は、return next()の代わりにres.json(err)を返し、実際に失敗した理由を実際に見ることができます。

また、最終ミドルウェアとしてエラーハンドラを追加し、next(err)を呼び出すこともできます。

関連する問題