2014-09-26 72 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