#node.js #mongodb #express #mongoose #apollo
#node.js #mongodb #экспресс #мангуст #аполлон
Вопрос:
Я пытаюсь подключиться к своей базе данных с помощью мангуста в Apollo-Server-Express. Я создал базу данных в терминале. Я прочитал, что «mongodb://localhost:27017/*имя базы данных *» является строкой uri по умолчанию, которую mongoose.connect принимает в качестве первого аргумента.
Однако console.log(mongoose.connection.readyState)
выводит » 2 » — подключение. Я бы ожидал «1», верно? При запросе сервер зависает, и возникает ошибка ServerSelectionError. Я попытался добавить инструкцию mongoose.connect с помощью await (как я видел в учебнике), но затем процесс запуска зависает. Есть ли что-то фундаментальное, чего мне не хватает? Любая помощь будет признательна!!
const { ApolloServer, gql } = require('apollo-server-express'); const express = require('express'); const mongoose = require('mongoose'); const main = async () =gt; { const app = express(); const server = new ApolloServer({ typeDefs, resolvers, introspection: true, playground: true, }); await server.start(); server.applyMiddleware({ app, }); mongoose.connect('mongodb://localhost:27017/db-name', { useUnifiedTopology: true, useNewUrlParser: true, }); console.log(mongoose.connection.readyState); console.log('MongoDB connected!!'); app.listen(process.env.PORT || 4000, () =gt; { console.log(`🚀 Server ready at port ${process.env.PORT || 4000}`); }); }; main();
Комментарии:
1. Работает ли служба mongod? Возможно, вам потребуется открыть терминал и выполнить команду mongod.
2. и вы уже подтвердили, что у вас работает сам mongodb?
Ответ №1:
Спасибо за ваши комментарии, ребята! Таким образом, проблема была двоякой:
- Монгод действительно не бежал. Я понял, что получил код ошибки 100, что означало, что данные каталога/бд не существуют. Я сначала попробовал,
$ sudo mkdir -p /data/db
но все равно получил ту же ошибку. Что тогда помогло, так это создать каталог в корневом каталоге и запустить mongod с$ mongod --dbpath ~/data/db
помощью . Это заставило Монгодба работать.
Но все та же проблема с моим сервером…
- Оказалось, что в моем случае uri должен быть
mongodb://127.0.0.1:27017/db-name
. Если я теперь завершу распечатку статуса подключения к серверу в setTimeout, я получу ожидаемый ответ 1 и смогу выполнять свои запросы!