【发布时间】:2020-09-23 23:48:25
【问题描述】:
您好,我还是 Nodejs 和 MongoDB 的初学者。当我运行如下所示的 res.render() 函数时,我得到 2 个控制台日志,第一个是来自 mongodb find 查询的正确结果,第二个是 null。如果我删除 res.render() 它仅适用于一个 console.log() 输出而不是第二个 null。
router.get('/:areaslug', (req, res) => {
// Query results
let areavar = {}
return client.db("AwesomeApartments")
.collection("areas")
.findOne({slug: req.params.areaslug
})
.then((datadb) => {
// first time shows correct results next it shows null
console.log(" bug-testing : "+JSON.stringify(datadb));
//storing result of first query to my object
areavar = datadb;
return client.db("AwesomeApartments")
.collection("apartments")
.find({area:datadb._id})
.toArray()
})
.then((apartmentdb) => {
// Storing results of second query
areavar.apartments = apartmentdb;
//removing this solves the issue
return res.render('area',areavar);
}).catch(err =>
{
console.log(err);
return;
})
});
【问题讨论】:
-
我建议您将
console.log(req.url)添加到您的代码中,您可以看到到底发生了什么。一种猜测(如果这是顶级路由器)是当浏览器向您的服务器询问网站图标时,您收到了对/favicon.ico的请求。 IMO,出于这个原因以及其他一些原因,您永远不应该拥有这样的通配符顶级路线。 -
您的代码中有一些严重的错误。您必须先了解基础知识。您仍然没有完全掌握如何使用 return 语句。不幸的是,我无法回答您的问题,因为我认为必须先有人接受它。但我建议你多学习一些关于 node/javascript 的基础知识,然后再学习。
-
@jfriend00 谢谢!遵循您的建议后,我发现浏览器正在请求 favicon.ico
-
仅供参考,这只是顶级通配符路由通常是个坏主意的原因之一。如果您的 slug 命名空间与站点命名空间发生冲突/重叠,它真的会阻碍任何未来的发展。它们都可以是顶级的,但您应该设计 slug,以便它们与您可能希望用于您的网站的顶级 URL 名称(例如
favicon.ico或在您的网站展示中使用的其他名称)是唯一的。跨度>
标签: node.js mongodb express es6-promise