Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当MongoDB不为空时,NodeJS站点出现服务器错误_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 当MongoDB不为空时,NodeJS站点出现服务器错误

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;

我将Node.js与MongoDB和Mongoose一起用于数据库连接。发生的情况是,如果数据库中没有值,则回调函数会很好地呈现后续页面(当然,在模板希望看到值的地方不会显示任何内容),但如果它们是值,则我将在命令行中遇到
按任意键继续…

以下是处理请求的路由,该请求指向应显示集合中所有值的页面

// 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()
。因此更可能出现问题,和/或与前面提到的变量有关。@BlakeSeven
img_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);