Javascript 当MongoDB不为空时,NodeJS站点出现服务器错误
我将Node.js与MongoDB和Mongoose一起用于数据库连接。发生的情况是,如果数据库中没有值,则回调函数会很好地呈现后续页面(当然,在模板希望看到值的地方不会显示任何内容),但如果它们是值,则我将在命令行中遇到Javascript 当MongoDB不为空时,NodeJS站点出现服务器错误,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我将Node.js与MongoDB和Mongoose一起用于数据库连接。发生的情况是,如果数据库中没有值,则回调函数会很好地呈现后续页面(当然,在模板希望看到值的地方不会显示任何内容),但如果它们是值,则我将在命令行中遇到按任意键继续… 以下是处理请求的路由,该请求指向应显示集合中所有值的页面 // GET request for the Blog page. exports.g_blog = function (req, res) { var image = req.Image;
按任意键继续…
以下是处理请求的路由,该请求指向应显示集合中所有值的页面
// GET request for the Blog page.
exports.g_blog = function (req, res) {
var image = req.Image;
image.find(function (err, docs) {
if (err) return console.error(err);
console.log(docs); // Prints the value we save initially
res.render('blog', {
title : 'Blog',
images: docs
});
});
};
在上面的代码中,Image
是模式文件中定义的模型的实例。
该定义如下
var ImageSchema = new Schema({
path : String
});
var Image = mongoose.model('Image', ImageSchema);
因此,在GET
请求中调用image.find
应该返回集合中的所有值,这些值存储在变量docs
我已经通过console.log(docs)
函数调用确认它在代码中达到了这一点,其中显示了空数组或填充数组。在填充数组的情况下,我会遇到上面的消息。在空数组中,输出以下GET请求信息
下面是我在DB查询的结果集为空时看到的示例
这是一个例子,我添加了一些值后会发生什么
与此同时,Chrome在发生这种情况时会挂断大约3秒钟,然后显示一条ERR\u CONNECTION\u densed
消息。此外,在提示时按任意键只会关闭终端选项卡
有什么帮助吗?
我想现在你应该明白了。。。在这里,您必须根据文件名和功能进行更改
谢谢和干杯什么是
img\u收藏
?在您列出的代码中没有提到任何地方,因此您显然在做其他事情。.find()
的结果不太可能有问题,因为您确实记录了这一点,但并非所有帐户都会调用res.render()
。因此更可能出现问题,和/或与前面提到的变量有关。@BlakeSevenimg_collection
是我试图将docs
值保存到全局上下文中的一个变量。它不起作用(而且感觉像是拙劣的实践),所以我放弃了这个想法。它也在我的原始源代码中被删除了,问题仍然存在于完全相同的行为中。我更新了我的问题以反映这一点。忽略的是,你已经给了我们背景故事和截图,但实际上我们不需要它们。对正在发生的事情给出一个清晰且可重复的案例。这给了人们一些可以合作的东西,并经常消除人们对实际问题的误解。您没有显示所有重要的代码。还有“试图保存”之类的语句?什么意思?我们在这里看到的只是一个.find()
请求,没有理由相信范围内还有其他内容。给我们一个可复制的案例。显示的代码在未定义变量
上应该是错误的。说清楚。让它成为现实。我不确定你还需要看哪些代码才能真正有所帮助。与这些函数相关的唯一其他代码是对app.get('/blog',routes.g_blog)的调用,其中routes是包含上述exports.g_blog代码的JS文件的require cal。我已经清楚地解释过,除此之外,破坏系统所需的唯一一件事就是是否有填充的DB。如果您认为有必要查看其他代码来帮助实现这一点,我非常愿意这样做,但我已经提供了我认为是整个相关上下文的内容@BlakesSevenHow建议编辑问题中的更多细节,而不是谈论它。这里友好而耐心的建议告诉你“这里没有足够的信息让我看到/重现问题”。所以越是越多。已经为您提供了一个很好的指针,即不发生输出的代码行就是可能出现问题的地方,并且您已经可以看到.find()
的结果,因此下一行是。。。。明白重点了吗?问题不是问“当没有找到文档时我如何处理响应?”,它只是不是一个很好的问题标题。如果仔细阅读OP的问题,确实存在与查询和返回内容的匹配(因此不是null
),但之后会发生错误。我对这个问题的评论是试图让OP公开res.render()
调用中使用的变量的源以及引用的模板。这就是他们“崩溃”的原因。所以你误解了这个问题。此外,请不要在书写时过度使用粗体。
var mongoose = require('mongoose');
var ImageSchema = new mongoose.Schema({
path : String
});
module.exports = mongoose.model('Image', ImageSchema );
var imageModel = require(../pathTo/yourModel.js);
module exports = (function () {
var ImageApi= express.Router();
image.find(function (err, docs) {
if (err) {
console.error(err);
}
else{
console.log(docs); // Prints the value we save initially
if(docs.length <=0){
console.log("No records found");
res.render('blog', {
title : 'Blog',
images: "No Records Found"
});
}else{
res.render('blog', {
title : 'Blog',
images: docs
});
}
}
});
return ImageApi;
})();
var imageApi = = require('./routes/image.js');
app.use('/image', imageApi);