带参数的快速路线不一致。这是我的代码吗?

时间:2017-08-31 17:39:13

标签: node.js express

所以我正在开发社交网络项目,我添加了上传图像的功能和可以从数据库返回图像对象的API路径,以便我可以显示它们。这一切都运行正常,然后我休息了几天(新游戏出来了)现在API溃败没有工作,有点。

所以这是路线:

    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
});

}});

所以我得到这个网址:http://127.0.0.1:8080/image/all/5989da1afdc58624a0b10fda

控制台提供错误404,如果我把它放在地址栏中我得到&#34;无法获取...&#34;但是如果我在id中添加或删除一个字母,它会返回一个应该的数组。

我还在一个隐身窗口中尝试了这个,以确保它不是缓存文件问题或类似的东西。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在上面的代码中,当发生错误时,您调用next()。如果你这样做并且你没有错误处理程序,那么你将得到一个404.在你的错误情况下,返回res.json(错误)而不是返回next(),你可能真的看到它失败的原因。

或者,您可以添加错误处理程序作为最终的中间件并调用next(错误)。