【问题标题】:MEAN stack not loading page when looking at mongodb collection查看 mongodb 集合时,MEAN 堆栈未加载页面
【发布时间】:2018-09-13 14:46:27
【问题描述】:

我正在玩 MEAN 堆栈,以便自学一点 javascript,并使用 Angular,但我在设置 MEAN 环境时遇到了麻烦。

我正在尝试连接到我的 Mongodb 数据库,并读取“users”集合的内容,该集合应该包含两条记录,“John Doe”和“Jane Doe”。

这是我的连接字符串的样子,以及我在 api.js 顶部的常量

//Importing express, Router, Mongoclient and ObjectID
const express = require('express');
const router = express.Router();
const MongoClient = require('mongodb').MongoClient;
const ObjectID = require('mongodb').ObjectID;

//Connect
const connection = (closure) => {
    //Connecting to "mongod://localhost" line, "/mean" is the name of the DB you
    //want to connect too
    return MongoClient.connect('mongodb://localhost:27017/mean', { useNewUrlParser: true }, (err, client) => { 
        if (err) return console.log(err);

        var db = client.db('mean');

        db.collection('users').findOne({}, function (findErr, result) {
            if (findErr) throw findErr;
            console.log(result.name);
            client.close()
        });

        //closure(db);
    });
};

当我从命令行运行“节点服务器”时,它运行正常,没有错误:

C:\Users\jack_\OneDrive\Documents\code\mean>node server
Running on localhost:3000

但是,当我尝试导航到“localhost:3000/api/users”时,没有任何反应,页面被卡住,如果我返回命令行,它会显示“users”中的第一个条目:

C:\Users\jack_\OneDrive\Documents\code\mean>node server
Running on localhost:3000
John Doe

我可以毫无问题地打开“localhost:3000/api”,它把我带到AngularJS登陆页面就好了。

我阅读过stackoverflow问题,发现mongodb驱动程序可能有问题,因为他们不小心在npm上发布了一个测试版,所以我检查了我的数据库版本和驱动程序版本:

C:\Users\jack_\OneDrive\Documents\code\mean>"C:\Program Files\MongoDB\Server\4.0\bin\mongod.exe" --version
db version v4.0.2
git version: fc1573ba18aee42f97a3bb13b67af7d837826b47
allocator: tcmalloc
modules: none
build environment:
    distmod: 2008plus-ssl
    distarch: x86_64
    target_arch: x86_64

数据库版本:

C:\Users\jack_\OneDrive\Documents\code\mean>"C:\Program Files\MongoDB\Server\4.0\bin\mongo.exe" --version
MongoDB shell version v4.0.2
git version: fc1573ba18aee42f97a3bb13b67af7d837826b47
allocator: tcmalloc
modules: none
build environment:
    distmod: 2008plus-ssl
    distarch: x86_64
    target_arch: x86_64

查看其他stackoverflow答案,由于我使用的版本,MongoClient.connect 现在returns a client object containing the database object

所以我修改了代码:

MongoClient.connect('mongodb://localhost:27017/mean', { useNewUrlParser: true }

var db = client.db('mean');

        db.collection('users').findOne({}, function (findErr, result) {
            if (findErr) throw findErr;
            console.log(result.name);
            client.close()

这消除了我最初的错误,即“db.collections 不是函数”,但是,根据我正在遵循的教程,我应该在网络浏览器中看到“用户”集合的内容,连同其他一些信息,有点像这样:

{"status":200,"data":[{"_id":"598ce66bf7d6d70def3d9f6f","name":"John Doe"}

但是,我不是, 那么我做错了什么?或者我错过了什么,记住我是在凌晨 3 点写这篇文章的,所以我很可能错过了什么

提前致谢

【问题讨论】:

    标签: angularjs mongodb mean-stack


    【解决方案1】:

    您可以使用以下代码连接数据库并查找数据

    const express = require('express');
    const router = express.Router();
    const MongoClient = require('mongodb').MongoClient;
    const ObjectID = require('mongodb').ObjectID;
    
    var MongoClient = require('mongodb').MongoClient;
    var url = "mongodb://localhost:27017/mean";
    
    MongoClient.connect(url, function(err, client) {
      if (err) throw err;
      var db = client.db("mean");
      db.collection("users").findOne({}, function(err, result) {
        if (err) throw err;
        console.log(result.name);
        db.close();
      });
    });
    

    【讨论】:

    • 当我将你的代码添加到文件中时,我现在得到一个不同的错误: var MongoClient = require('mongodb').MongoClient; ^ SyntaxError: 标识符 'MongoClient' 已经被声明,当我尝试注释掉“var MongoClient”或“const MongoClient”时,我收到一个错误,说它没有被声明
    • 好的,我知道了,你可以从代码中删除这行“var MongoClient = require('mongodb').MongoClient;”,再试一次就可以了
    • 谢谢,解决了这个问题,但现在我得到了一个不同的错误:if (err) throw err; ^ 错误:无效的架构,预期为mongodbmongodb+srv 我发现的大多数其他与错误有关的问题都说这是因为我用来连接的 url 是错误的,他们说修复是添加“mongod ://" 到它的开头,我已经完成了,所以字符串现在是:"var url = mongod://localhost:27017/mean" 还有什么想法吗?
    猜你喜欢
    • 2017-01-03
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多