Я пишу веб-приложение, прежде всего, чтобы служить в качестве корзины покупок. Приземление/домашняя страница приложения отражает продукты, которые в настоящее время доступны для продажи. То, что я хотел бы сделать, - это маршрут к каждому продукту с использованием идентификатора продукта. Я определил модель продукта (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 с отдельной схемой? Это кажется излишним и более подверженным ошибкам. Я буду читать дальше в этом и домой, чтобы получить отсюда обратную связь. Еще раз спасибо.
Спасибо. Это помогло тонну. –