Я играю со стеком 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 часа ночи, поэтому я, скорее всего, что-то упустил
Заранее спасибо