【发布时间】:2016-09-03 03:20:05
【问题描述】:
我是 nodejs/express/mongodb/jade 的新手,一段时间以来我一直在尝试建立一个简单的站点,以帮助以更有效的方式返回过去的数据并能够快速重用它。我确定对我们来说最简单的方法是使用动态 URL,并且已经开始取得良好进展,然后遇到了障碍。
最终目标:我希望使用 URL 参数来确定返回哪些数据。在本地运行,语法看起来像 localhost/:collection/:id。例如,它看起来像:localhost/lastyear/aug2001。因此,结果页面将显示去年集合中 _ID 等于 aug2001 的数据。
为了实现这一点,我目前将 index.js 中的路由设置为:
var express = require('express');
var router = express.Router();
router.get('/:collection/:id', function(req, res) {
var db = req.db;
var collection = db.get(req.params.collection);
var entry = collection.findOne({ id: req.params.id },{})
res.render('dataentry',{ title: 'Information for: ' + req.params.collection + ' ' + req.params.id +'.', data: entry
});
});
module.exports = router;
集合中文档的结构如下所示:
{
"_id": "aug2001"
"header": "header text"
"content": "content text"
"item" : "items text"
}
为了测试查看某种形式的数据,我用于数据输入的翡翠文件如下所示(我知道制表符在翡翠中很重要,在帖子中它可能看起来不正确,但我确保制表符是正确的):
block content
p Finding info...
p= data.header
p= data.content
p= data.item
当导航到 /lastyear/aug2001 时,我看到的只是页面加载“正在查找信息...”,我不确定为了显示 doc 数据而使用玉语法时我缺少什么。我感谢任何帮助/建议以更有效的方式来实现我的最终结果。
编辑: 真正的问题不是 JADE 显示,而是从数据库中提取数据时的异步数据库调用。
【问题讨论】:
-
这里发生了很多事情 - 作为第一步,您应该尝试隔离您的问题。例如,问题是在 Jade 中还是在 db 查询中?要测试这一点,你可能会例如在
res.render()之前写console.log(entry);以查看是否正确找到数据库对象。如果你没有看到你所期望的,你知道你的问题出在你的数据库调用上,而不是你的 Jade。 -
感谢您的评论。这里肯定发生了很多事情,我很欣赏你的评论。我继续添加代码,虽然我对 console.log() 的标准输出不太熟悉,但输出看起来不正确。我继续将它添加到我在开始我自己的项目之前的工作教程中,当在控制台中运行它时,它会显示集合中文档的实际数据结构。因此,我的 db 调用有问题。谢谢您的帮助。将在我解决问题时更新/编辑问题。
标签: javascript node.js mongodb express pug