2014-09-26 4 views
0

Я пишу веб-приложение, прежде всего, чтобы служить в качестве корзины покупок. Приземление/домашняя страница приложения отражает продукты, которые в настоящее время доступны для продажи. То, что я хотел бы сделать, - это маршрут к каждому продукту с использованием идентификатора продукта. Я определил модель продукта (adminProductModel) следующим образом:Mongoose findById Route Issue

'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(); 

Я могу отправлять и получать и удалять продукты, используя вышеупомянутую модель с помощью контроллера администратора. Прекрасно работает! Затем я пошел дальше и создал контроллер, модель и шаблон элементов, которые определены ниже, с целью маршрутизации с домашней страницы (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} 

При нажатии на якорный ярлык он направляет на правильный идентификатор, начиная с индекс, но выбрасывает следующий файл, не найденный ошибка «URL/index/542237117b5f3e72136d70c5 не разрешил маршрут».

Что я здесь делаю неправильно? Я знаю, что я должен запрашивать базу данных для продуктов по уникальному объекту. Я реализую это неправильно? Если да, то почему он разрешает ошибку, не найденную в файле, или, по крайней мере, делает правильную разметку?

Спасибо за тонну. Я потратил несколько дней на размышления об этом, и я исчерпал все свои подходы, чтобы решить эту проблему. Я включил базу данных на полноту:

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

вы делаете как этот

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

Спасибо. Это помогло тонну. –

Смежные вопросы