2014-09-26 73 views
0

我正在編寫一個Web應用程序,主要用作購物車。該應用的登陸/主頁反映了當前可供出售的產品。我想要做的是使用產品ID路由到每個產品。貓鼬findById路由問題

'use strict'; 
var mongoose = require('mongoose'); 

var productModel = function() { 

//Define a super simple schema for our products. 
var productSchema = mongoose.Schema({ 
    name: String, 
    price: Number, 
    productImg: String, 
    description: String 
}); 

return mongoose.model('Product', productSchema); 

}; 

module.exports = new productModel(); 

我能夠通過一個管理控制器後,並獲得和刪除使用上述型號的產品:我如下定義的產品型號(adminProductModel)。很棒!然後,我創建了一個項目控制器,模型和模板,它們定義如下,意圖使用項目/產品的ID從主頁(index.dust)路由到項目的頁面。

項控制器:

'use strict'; 

var ItemModel = require('../../models/adminProductModel'); 
var db = require ('../../lib/database'); 

module.exports = function (router) { 

router.get('/index/:id', function (req, res) { 
    db.ItemModel.findById({_id: req.params._id}, function (err, prod){ 
     if(err){ 
      console.log('FindById filter error:', err) 
     } 

     var model = {product: prod} 

     res.render('item/index', model); 
     }); 
    }); 
    }; 

項模型:

'use strict'; 

module.exports = function ItemModel() { 

return { 
    name: 'item' 
    }; 
}; 

在主頁(指數)相關的代碼是: 模板(使用灰塵作爲渲染引擎):

{>"layouts/master" /} 
{<title} 
    Greatness! 
{/title} 
{<body} 
{?products} 
     {#products} 
     <div class="col-sm-6 col-md-3"> 
      <div class="thumbnail"> 
       <a href = "/index/{.id}" class = "thumbnail"><img src="img/photo.png" alt="photo" width ="260" height = "180"/></a> 
       <center> 
        <h5>{.name}</h5> 
        <p>${.price}</p> 
        <a href="/index/{.id}" class="btn btn-success">Buy</a> 
       </center> 
      </div> 
     </div> 
     {/products} 
    {/products} 
{/body} 

當單擊錨標籤時,它將路由到正確的ID,從索引頁面,但會拋出以下文件未找到錯誤「URL/index/542237117b5f3e72136d70c5未解析爲路由」。

我在這裏做錯了什麼?我知道我必須通過其唯一的objectId來查詢數據庫中的產品。我在執行這個錯誤嗎?如果是這樣,爲什麼它解析爲文件未找到錯誤或至少提供正確的標記?

感謝提前一噸。我花了幾天的時間思考這個問題,並且我已經用盡了所有的方法來解決這個問題。我已經包括數據庫的完整性:

use strict'; 
var mongoose = require('mongoose'); 

var db = function() { 
return { 
    config: function (conf) { 
     mongoose.connect('mongodb://' + conf.host + '/' + conf.database); 
     var db = mongoose.connection; 
     db.on('error', console.error.bind(console, 'connection error:')); 
     db.once('open', function callback() { 
      console.log('db connection open'); 
     }); 
    } 
    }; 
}; 

module.exports = db(); 

定義我的itemModel與一個單獨的模式可能是明智的嗎?這似乎是多餘的,更容易出錯。我要進一步閱讀這個和家裏的一些反饋。再次感謝。

回答

1

你好你是從PARAMS獲得價值ID,但它是:ID沒有:_id

你正在做這樣的

console.log("id value : "+req.params._id) 
db.ItemModel.findById({_id: req.params._id}, function (err, prod){ 

它應該是這樣的

console.log("id value : "+req.params.id) 
db.ItemModel.findById({_id: req.params.id}, function (err, prod){ 
+0

感謝。這幫了一大筆錢。 – 2014-10-05 07:15:59