MEAN стек не загружает страницу при просмотре коллекции mongodb - PullRequest
0 голосов
/ 13 сентября 2018

Я играю со стеком 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

Рассматривая другие ответы на стекопоток, из-за используемой версии MongoClient.connect сейчас возвращает клиентский объект, содержащий объект базы данных

Итак, я исправил код с помощью:

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 не является функцией», но, согласно учебному пособию, которому я следую, я должен увидеть содержимое коллекции «users» в веб-браузере, наряду с некоторой другой информацией, вроде этого:

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

Но я не Так что я сделал не так? или я что-то упустил, имея в виду, что писал это в 3 часа ночи, поэтому я, скорее всего, что-то упустил

Заранее спасибо

1 Ответ

0 голосов
/ 13 сентября 2018

Вы можете использовать код ниже, чтобы соединиться с БД и найти данные

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();
  });
});
...