我正在编写一个主要用作购物车的网络应用程序。该应用程序的登陆/主页反映了当前可供销售的产品。我想做的是使用产品ID路由到每个产品。我已经定义了一个产品模型(adminProductModel),如下所示:
'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)路由到项目页面#39; s id。
项目控制器:
'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,但会抛出以下文件未找到错误&#34; URL / index / 542237117b5f3e72136d70c5未解析为路由&#34;。
我在这里做错了什么?我知道我必须通过其唯一的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可能是明智的吗?这似乎是多余的,更容易出错。我将进一步阅读此内容并回到主页,获取此处的反馈意见。再次感谢。
答案 0 :(得分:1)
嗨,你从params获得id值,但它是:id not:_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){