Mongoose: Предупреждение об устаревании: `open()` устарела в mongoose >= 4.11.0, вместо этого используйте `openUri()`

Созданный на 25 июн. 2017  ·  158Комментарии  ·  Источник: Automattic/mongoose

Предупреждение об устаревании: open() устарело в mongoose >= 4.11.0, вместо этого используйте openUri() или установите параметр useMongoClient при использовании connect() или createConnection()

Мангуст 4.11.0, MongoDB 2.2.29, NodeJS 8.1.2

Самый полезный комментарий

Самое простое решение для этого; " npm remove mongoose " затем " npm install [email protected] --save " проблема решена. Модернизация не всегда лучший вариант.

Все 158 Комментарий

+1, я понятия не имею, где исправить, чтобы избавиться от этого предупреждения

Предупреждение касается кода внутри Mongoose на самом деле, когда соединительная строка имеет набор реплик:

Mongoose.prototype.connect = function() {
  var conn = this.connection;
  if ((arguments.length === 2 || arguments.length === 3) &&
      typeof arguments[0] === 'string' &&
      typeof arguments[1] === 'object' &&
      arguments[1].useMongoClient === true) {
    return conn.openUri(arguments[0], arguments[1], arguments[2]);
  }
  if (rgxReplSet.test(arguments[0]) || checkReplicaSetInUri(arguments[0])) {
    return new MongooseThenable(this, conn.openSet.apply(conn, arguments));
  }

  return new MongooseThenable(this, conn.open.apply(conn, arguments));
};

@tinovyatkin

Значит, это баг?

выглядит как ошибка, можем ли мы обойти это, добавив useMongoClient: true в параметры (тогда вы можете увидеть устаревание драйвера MongoDB, но это не выдает)

Добавление useMongoClient: true приводит к исчезновению сообщения, но тогда мои документы просто перестают загружаться. Не отлаживал его глубже, но я бы предпочел сначала услышать лучшие практики, прежде чем адаптировать свой код.

Мое приложение также не работает с обходным решением, предложенным выше. Он просто больше не запускает метод MyModel.find и не выдает ошибок и тайм-аута.

Причина, по которой опция «useMongoclient: true» не работает в большинстве случаев, заключается в том, что для этой опции каждый объект, связанный с подключением мангуста, возвращает фиктивный объект, потому что он не может получить доступ к mongodb

Я пытался использовать его как

const server = express();
mongoose.connect('mongodb://localhost/advisorDemoTestDB', { useMongoClient: true })
    .then(() => require('./db-init')(server))
    .catch(err => console.error(err));

но это не работает

Такая же проблема, даже без наборов реплик.

Возникла такая же проблема:

(node:4138) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0,
 use `openUri()` instead, or set the `useMongoClient` option if using `connect()` 
or `createConnection()`

Такой же...

После того, как я добавил приведенный ниже код в свое соединение с монго, я больше не могу ничего запрашивать.
{useMongoClient: правда}.
Любые предложения будут оценены!!

+1 то же самое с наборами реплик, без шардинга

+1

+1

+1

+1

+1

+1

+1

Самое простое решение для этого; " npm remove mongoose " затем " npm install [email protected] --save " проблема решена. Модернизация не всегда лучший вариант.

+1

+1

получаю 2 сообщения:

(node:9260) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0,
use `openUri()` instead, or set the `useMongoClient` option if using `connect()`
or `createConnection()`

Server started on port 3000

Db.prototype.authenticate method will no longer be available in the next major
release 3.x as MongoDB 3.6 will only allow auth against users in the admin db
and will no longer allow multiple credentials on a socket. Please authenticate
using MongoClient.connect with auth credentials.

Первая ошибка появилась в 4.11.0. Вторая ошибка также появилась в предыдущей версии Mongoose.

plhosk, второй должен был быть исправлен в 4.11, но, похоже, он все еще там, для меня тоже.

+1

+1 к сожалению.

Установил 4.10.8 без проблем. Пожалуйста, рассмотрите возможность изменения npm install mongoose --save по умолчанию на 4.10.8, пока 11 не станет стабильной.

+1

+1

+1

+1

Я также нашел эту проблему тоже.
__Версия узла__: v6.10.0

__MongoDB__ emvironment: (я использовал последнюю версию док-контейнера Mongo)

2017-06-20T08:04:24.509+0000 I CONTROL  [initandlisten] db version v3.4.5
2017-06-20T08:04:24.509+0000 I CONTROL  [initandlisten] git version: 520b8f3092c48d934f0cd78ab5f40fe594f96863
2017-06-20T08:04:24.509+0000 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.1t  3 May 2016
2017-06-20T08:04:24.509+0000 I CONTROL  [initandlisten] allocator: tcmalloc
2017-06-20T08:04:24.509+0000 I CONTROL  [initandlisten] modules: none
2017-06-20T08:04:24.509+0000 I CONTROL  [initandlisten] build environment:
2017-06-20T08:04:24.509+0000 I CONTROL  [initandlisten]     distmod: debian81
2017-06-20T08:04:24.509+0000 I CONTROL  [initandlisten]     distarch: x86_64
2017-06-20T08:04:24.509+0000 I CONTROL  [initandlisten]     target_arch: x86_64
2017-06-20T08:04:24.509+0000 I CONTROL  [initandlisten] options: { security: { authorization: "enabled" } }

Моя конфигурация подключения:

var dbURL = `mongodb://${dbHost}:${dbPort}/${dbName}?authSource=admin`;
var dbAuth = { 
    useMongoClient: false
    user: dbUser,
    pass: dbPass
}
mongoose.connect(dbURL, dbAuth);

Когда я использую useMongoClient как ложь. Mongoose показывает следующие предупреждения:

(node:7868) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0, use `openUri()` instead, or set the `useMongoClient` option if using `connect()` or `createConnection()`
Express server listening on port 3222 in development mode
Db.prototype.authenticate method will no longer be available in the next major release 3.x as MongoDB 3.6 will only allow auth against users in the admin db and will no longer allow multiple credentials on a socket. Please authenticate u
sing MongoClient.connect with auth credentials.

Но это работает просто отлично.

Однако, когда я установил его на true , я обнаружил эту ошибку:

Unhandled rejection MongoError: not authorized on users to execute command { listIndexes: "sessions", cursor: {} }
    at Function.MongoError.create (<my project path>\node_modules\mongoose\node_modules\mongodb-core\lib\error.js:31:11)
    at queryCallback (<my project path>\node_modules\mongoose\node_modules\mongodb-core\lib\cursor.js:212:36)
    at <my project path>\node_modules\mongoose\node_modules\mongodb-core\lib\connection\pool.js:469:18
    at _combinedTickCallback (internal/process/next_tick.js:67:7)
    at process._tickCallback (internal/process/next_tick.js:98:9)

Я также пытаюсь удалить authSource=admin из URL-адреса подключения, но это все равно не работает.

(узел: 451) Предупреждение об устаревании: open() устарело в мангусте >= 4.11.0, используйте
openUri() вместо этого или установите параметр useMongoClient при использовании connect() или createConnection()
Метод Db.prototype.authenticate больше не будет доступен в следующем крупном обновлении.
аренда 3.x, поскольку MongoDB 3.6 разрешает аутентификацию только для пользователей в базе данных администратора и w
ill больше не позволяет использовать несколько учетных данных в сокете. Пожалуйста, авторизуйтесь, используя M
ongoClient.connect с учетными данными для аутентификации.

Я получаю эту проблему с версией mongoose 4.11.0 и версией MongoDB 3.4.5.

+1

+1

Использовать

mongoose.createConnection(URI)

@нандофалькао При использовании:

  • mongoose.createConnection (URI);
  • mongoose.connect(URI, {useMongoClient: true});

Видимо не могу сохранять новые записи.

let userSchema = mongoose.Schema({ name: String });
let User = mongoose.model('User', userSchema);
let joao = new User({ name: 'NewJoao ' });
joao.save((err) => err ? throw err : console.log('User created!'));//nothing happens

Добавление полиглота сегодня вечером и +1, испытывающее это.

// Load Mongoose
const mongoose = require('mongoose');
// import mongoose from 'mongoose' didn't give access to .connect()

// Use native Promises
mongoose.Promise = global.Promise;

// Connect database
export const Mongoose = new Promise((resolve, reject) => {
  const uri = `mongodb://${Singleton.currentConfig.databases.mongodb.host}/${Singleton.currentConfig.databases.mongodb.database}`;

  const options = {
    user: Singleton.currentConfig.databases.mongodb.user,
    pass: Singleton.currentConfig.databases.mongodb.password,
    server: {
      reconnectTries: Singleton.currentConfig.databases.mongodb.reconnectTries,
      reconnectInterval: Singleton.currentConfig.databases.mongodb.reconnectInterval,
      socketOptions: {
        keepAlive: Singleton.currentConfig.databases.mongodb.keepAlive,
        connectTimeoutMS: Singleton.currentConfig.databases.mongodb.connectTimeoutMS
      },
    },
  };

  // Initiate document store
  mongoose.connect(uri, options)

  // Check for anomalies
  .then((connected) => {
    if (mongoose.connection.readyState !== 1) {
      reject(connected);
    }
    resolve(connected);
  })

  // Complete meltdown
  .catch((error) => {
    console.log(`MongoDB Connection Error: ${error}`);
    process.exit(0);
  });
});

+1

и я получаю 2-е сообщение:

[2017-06-27 16:14:23.702] [INFO] :: - Сервер запущен в порту 2000

(узел: 1193) Предупреждение об устаревании: open() устарело в мангусте >= 4.11.0, вместо этого используйте openUri() или установите параметр useMongoClient при использовании connect() или createConnection()

Метод Db.prototype.authenticate больше не будет доступен в следующем основном выпуске 3.x, поскольку MongoDB 3.6 будет разрешать аутентификацию только для пользователей в базе данных администратора и больше не будет разрешать использование нескольких учетных данных в сокете. Пожалуйста, выполните аутентификацию с помощью MongoClient.connect с учетными данными.

+1

+1

+1

+1

+1

Может ли кто-нибудь заблокировать это, чтобы предотвратить бесполезные +1?

В качестве любезности для подписчиков этой темы, пожалуйста, не отвечайте +1, потому что это генерирует бесполезные уведомления по электронной почте. Это не форум. Если вы хотите следить за этой темой, используйте кнопку подписки на правой боковой панели. Вы также можете провести небольшое исследование самостоятельно и предложить решения.

Я изменил версию обратно на 4.10.8, и теперь она работает нормально.

Похоже, у ValYouW есть потенциальное решение проблемы с загрузкой документа: #5404.

mongoose.connection.openUri('mongodb://127.0.0.1/camp_v12')

Кто-нибудь пробовал это? мое устаревшее предупреждение исчезло, когда я его использую, это было из документации

http://mongoosejs.com/docs/connections.html

@crisamdegracia предполагает, что у вас уже есть связь

// Or, if you already have a connection
connection.openUri('mongodb://localhost/myapp', { /* options */ });

чего у нас нет (по крайней мере, я, так как я подключался к mongodb с помощью метода mongoose.connect)

mongoose.connect(config.get('mongo'), {
  useMongoClient: true,
});

Я не смог найти ни одного документа... Что не так?

+1

Итак, после просмотра связанной проблемы от @phased90 , которая объясняет, что вы можете подключиться следующим образом:

const mongoose = require('mongoose');

mongoose.Promise = global.Promise;
mongoose.connect('mongodb://localhost/test', {useMongoClient: true})
    .then(() => {
        let Cat = mongoose.model('Cat', {name: String});
        let kitty = new Cat({name: 'Zildjian'});

        kitty.save(err => {
            if (err) {
                console.log(err);
            } else {
                console.log('meow');
            }
        });
    })
    .catch(err => console.error(err));

Я быстро просмотрел код, и оказалось, что 4.11 возвращает MongooseThenable , за исключением случаев, когда предоставляется опция {useMongoClient: true} . В этом случае он вызывает Connection.prototype.openUri , который возвращает новый экземпляр Promise.ES6 . Должен ли этот вызов Connection.prototype.openUri быть завернут в MongooseThenable ?

Прошу прощения за вопрос, я впервые просматриваю эту кодовую базу, поэтому немного не уверен. Но я был бы рад попытаться помочь с исправлением, если бы я мог получить некоторые разъяснения относительно того, должен ли Moongoose.prototype.connect всегда возвращать экземпляр MongooseThenable .

Имейте в виду, что использование {useMongoClient: true} приведет к вызову Connection.prototype.openUri , который не запускает буферизованные команды, которые были созданы __до__ подключения к БД из-за #5404.

+1

Извините, все было сумасшествие, посмотрю немного.

@varunjayaraman не нужно извиняться, приятель. Люди могут либо подождать, либо попытаться исправить это самостоятельно.

+1

Итак, что касается фактической проблемы, которая была открыта, предупреждение об устаревании не является ошибкой, это просто предупреждение: mongoose собирается отказаться от своей текущей логики подключения, поэтому вы должны передать параметр useMongoClient . Это можно найти в документации

В отдельном примечании, похоже, что это было изменение в обратном направлении, надеюсь, это можно будет исправить в следующем второстепенном выпуске (или, может быть, это не так, я здесь очень мало сплю):

обычно это работает (за исключением части useMongoClient , которая является новой):

const mongoose = require('mongoose');
const co = require('co');
mongoose.Promise = global.Promise;
const GITHUB_ISSUE = `gh-5399`


exec()
  .then(() => {
    console.log('successfully ran program');
    process.exit(0);
  })
  .catch(error => {
    console.error(`Error: ${ error }\n${ error.stack }`);
  });


function exec() {
  return co(function*() {
    const db = mongoose.createConnection(`mongodb://localhost:27017/${ GITHUB_ISSUE }`, { useMongoClient: true })
    const schema = new mongoose.Schema({
      name: String
    });


    const Model = db.model('Model', schema);
  });
}

Кажется, это вызывает у меня ошибку, потому что db.model больше не является функцией.

При использовании mongoose.model это работает:

const mongoose = require('mongoose');
const co = require('co');
mongoose.Promise = global.Promise;
const GITHUB_ISSUE = `gh-5399`


exec()
  .then(() => {
    console.log('successfully ran program');
    process.exit(0);
  })
  .catch(error => {
    console.error(`Error: ${error}\n${error.stack}`);
  });


function exec() {
  return co(function* () {
    const db = mongoose.connect(`mongodb://localhost:27017/${GITHUB_ISSUE}`, { useMongoClient: true })

    return db
      .then(() => {
        const schema = new mongoose.Schema({
          name: String
        });


        const Model = mongoose.model('Model', schema);

        return Model.create({ name: 'test' });
      })
      .then(doc => console.log(doc));

  });
}

@varunjayaraman Я только что обновил Mongoose и использовал useMongoClient: true , как вы предлагаете, но у меня есть проблема.
Согласно официальной документации Mongoose , он не поддерживает опции user и pass :

the options [user] is not supported
the options [pass] is not supported

И да, авторизоваться не удалось. :-1:

Вместо этого я попытаюсь добавить пользователя и передать строку подключения.
Он работает, когда я добавляю имя пользователя и пароль в строку подключения. Возможно, вам следует обновить документацию. 😐

@itpcc пытается использовать версию 4.10.8 — лучшее решение на данный момент.

npm remove mongoose
npm install [email protected] --save

1 кредит

@CQBinh Спасибо за совет. Я уже читал эти комментарии по этому поводу.
Тем не менее, я не думаю, что использование старой версии является лучшим решением на данный момент. И это можно решить, вставив в строку подключения.
Я просто сбит с толку, потому что это было упомянуто в документе, но это не работает. :/
Кстати, я сообщаю здесь как о новой проблеме

@varunjayaraman , если db.model больше не существует, как можно обрабатывать несколько разных соединений мангуста с разными моделями?

например, model1 и model2 присоединены к mongooseConnection1, а model3 и model4 присоединены к mongooseConnection2.

Раньше это делалось путем вызова mongoose.createConnection для каждого соединения и присоединения моделей к каждому из этих возвращаемых значений.

Изменить: или он все еще работает в этом случае:

const conn = mongoose.createConnection(...);
const Model = conn.model('ModelName', schema);

+1

@boyce-ywr СЕРЬЕЗНО, еще один +1??? Что с вами не так люди??
Пишите конструктивные комментарии, а не подобные вещи.

Что касается мангуста, мне не ясно, будет ли заменен метод mongoose.connect() в будущих выпусках или нет. Кто-нибудь может объяснить, пожалуйста?

@simonemazzoni Вы правы, они рассылают нам СПАМ.

Если вы хотите получать уведомления для этой темы, все, что вам нужно сделать, это подписаться на нее (кнопка есть вверху темы),

Все, что вы делаете, когда вы +1 , отправляете всем здесь электронное письмо со словами

Привет я здесь!

Нам все равно , ждем конструктивных комментариев и решения .

Кроме того, почему бы всем вам, +1, не удалить свои сообщения из этого списка, они бельмо на глазу и боль в тылу, чтобы прокручивать их, чтобы добраться до настоящих комментариев.

Как уже говорили некоторые люди, единственное "решение" - вернуться к [email protected]_...
По крайней мере на данный момент!

Похоже на ошибку, вернулся к [email protected] , чтобы решить проблему

Используйте mongoose.createConnection(...) вместо mongoose.connect(...)

Вот полный рабочий пример использования [email protected] на основе рекомендации @diegoazh .

const mongoose = require('mongoose')
mongoose.Promise = require('bluebird')  // optional, use this to get rid of 
                                        // the mpromise DeprecationWarning
const conn = mongoose.createConnection('mongodb://localhost/testDB')
const Schema = mongoose.Schema

const UserSchema = new Schema({
    username: String,
    email: String
})

const User = conn.model('User', UserSchema)
module.exports = User

@midnightcodr Значит, мы просто отказываемся от подключения и вместо этого используем createConnection?

@bertolo1988 точно так же, как люди предложили по этой проблеме, в настоящее время есть два обходных пути.

  1. Откат к 4.10.8
  2. Используйте новый шаблон, если хотите придерживаться новой версии.
const conn = mongoose.createConnection(...)
const Model = conn.model(...)

Я лично предпочитаю второе решение.

Спасибо!!!
решается с помощью createConnection и использует это соединение для создания модели (вместо мангуста)

let mongoose = require('mongoose');

mongoose.Promise = global.Promise;

module.exports = mongoose;
const mongoose = require('./set-mongoose');
module.exports = mongoose.createConnection('mongodb://localhost/advisorDemoTestDB');

Новый шаблон подключения требует некоторых изменений кода, и в зависимости от размера вашего проекта это может означать много времени и, возможно, даже изменения архитектуры (учитывая тот факт, что для создания модели требуется подключение).

Было бы здорово, если бы старая модель соединения могла обернуть новую модель соединения.

Постов очень много, попробую подытожить:

  1. Предупреждение является устаревшим предупреждением, то есть спешки нет. Если мы ничего не изменим, все будет работать как всегда, вроде все в порядке.

  2. Согласно предупреждению, connect() будет/был изменен, и передача useMongoClient будет обязательной. Но вот возможная ошибка/проблема

  • connect('myurl', {useMongoClient: true}) => документ перестает загружаться и запись в БД невозможна

  • connect('myurl', {useMongoClient: false}) => работает нормально, но предупреждение по-прежнему отображается

Поэтому целью этой проблемы является исправление использования useMongoClient в случае вызова метода connect.

Согласен?

Тем не менее, несмотря на то, что предупреждение об устаревании действительно является «просто» предупреждением, его появление заставляет меня задаться вопросом, когда оно действительно будет удалено. Если mongoose следует за semver, он все еще должен быть в ветке 4.x. Поэтому он все еще должен работать с обратной совместимостью, пока не будет выпущена версия 5.x.

Что касается самого изменения, меня немного раздражает, что я не смог быстро найти что-либо об этом изменении, кроме того, что упоминается в журнале изменений. И даже когда вы меняете его, все равно что-то ломается, и, по словам многих людей, это из-за вызова .model() .

Кроме того, даже документы по-прежнему показывают mongoose.connect() и mongoose.model() , что делает этот вопрос еще более запутанным. Изменение mongoose.connect() упоминается только в разделе Пулы подключений, а не в других частях этой страницы . Таким образом, остается вопрос, является ли это изменение ошибкой или намеренно?

Я не знаю, к чему все идет, но я провел большую часть этих выходных, пытаясь установить соединение с Atlas MongoDB. Собственный драйвер mongodb мгновенно запустился и запустил CRUD.

Однако попытка заставить мангуста двигаться - это полный кошмар. Если я использую createConnection с 4.11, соединения кластера будут уничтожены:

MongoError: connection 4 to cluster0-myshard.mongodb.net:27017 closed

В качестве альтернативы я мог бы установить

useMongoClient: true

но тогда я получаю неопределенность в модели подключения.

<info> atlas-api-test.js:65 (Test.testVendors) conn.model undefined

@Archomeda не планирует удалять устаревшее поведение подключения в 4.x, а 5.x блокируется при переводе новой логики подключения в устойчивое состояние. В документах по подключению есть документы , которые будут улучшены в 4.11.1, и ссылка на них должна быть полезной. Re: вызов model() , если вы укажете useMongoClient: true , createConnection() не вернет соединение, а скорее обещание, которое разрешается в соединение, которое вам нужно .then() вкл. Обоснование описано здесь: https://github.com/Automattic/mongoose/issues/5404#issuecomment -312522539 Пожалуйста, не стесняйтесь высказывать любые опасения по этому поводу в выпуске № 5404.

@mkastner выглядит так, будто вы используете createConnection() . С useMongoClient: true createConnection() возвращает обещание, которое разрешается в соединение. Пожалуйста, используйте await mongoose.createConnection() или mongoose.createConnection().then()

@peterpeterparker #5404 указал на проблему с новой логикой подключения, которая будет исправлена ​​в версии 4.11.1 и будет выпущена в течение следующих 24 часов.

@ cosminn777 , какие у тебя проблемы с архитектурой? Пожалуйста, откройте отдельную тему для их обсуждения. Долгосрочный план заключается в том, что в 5.x мы не будем поддерживать Node < 4, поэтому каждый, кто использует mongoose, будет иметь собственный доступ к генераторам и/или async/await, поэтому это изменение будет таким же простым, как добавление yield Оператор await .

@alanpurple проблема, о которой вы говорите, такая же, как и упомянутая # 5404, и она будет исправлена ​​​​в версии 4.11.1.

@itpcc Я открыл отдельную проблему для отслеживания № 5432. На данный момент введите свое имя пользователя/пароль в URI: var dbURL = mongodb://${dbUser}:${dbPass}@${dbHost}:${dbPort}/${dbName}?authSource= админ`.

В общем, спасибо всем за ваше терпение в попытке попробовать это новое поведение. Я понимаю, что переключение вызовет некоторую головную боль, поэтому мы спрятали это поведение за флагом, но некоторые изменения, предстоящие для MongoDB 3.6, требуют полного пересмотра внутренней логики подключения mongoose. Я надеюсь, что новая логика подключения приведет к меньшему количеству ошибок подключения, связанных с мангустом, в долгосрочной перспективе, но, пожалуйста, потерпите нас, пока мы исправим поведение и документацию. Мы очень ценим ваши отзывы.

Пока вы используете 4.x, ваша текущая логика подключения будет работать, она просто выведет предупреждение. Тем временем, пожалуйста, не стесняйтесь сообщать о любых проблемах, которые у вас есть, в отдельной проблеме github.

Только что применил новый метод, и он отлично работает. Всем спасибо!

@vkarpov15 спасибо за разъяснения.

К вашему сведению, такое же предупреждение об устаревании выдается и с openSet (я использую набор реплик).

Подводя итог, можно с уверенностью игнорировать это предупреждение, поскольку оно относится только к внутренней работе Mongoose, и мы могли бы попытаться использовать useMongoClient , но пока не обязаны.

Как вы думаете, насколько он стабилен? Безопасно ли использовать? Я бы не хотел тратить 2 часа на рефакторинг всех наших моделей и логики подключения, чтобы обнаружить, что это все еще непригодно для использования в производстве.

Возможно ли удалить предупреждение об устаревании до тех пор, пока использование флага не станет стабильным и рекомендуемым способом подключения в будущем? Или эта точка уже достигнута?

@vkarpov15

Но я использую асинхронность в createConnection. Я настроил два теста на сервере БД. Первый — это собственный канареечный тест mongo-js, чтобы убедиться, что URL-адрес работает, и я могу писать и читать:

tape('test connection via mongo native', async function testMongoConnection(t) {

  try {

    t.plan(1);
    let db = await MongoClient.connect(dbURL);
    await db.collection('users').insert({name: 'username'});
    let result = await db.collection('users').find({});
    let docs = await result.toArray();
    log.info('result', await result.toArray());
    t.equal(1, docs.length);
    db.collection('users').remove({});

    await db.close();

  } catch (err) {
  console.error(err)
  }
});

Результат:

2017-07-04T09:00:34+0200 <info> atlas-api-test.js:28 (Test.testMongoConnection) result [ { _id: 595b3d1146734207bad88f9d, name: 'username' } ]
✔ should be equal

Успешно прошел тест мангуста с использованием мангуста createConnection с ожиданием:

tape('test connection via mongoose', async function testMongooseConnection(t) {

  try {
      let conn = await mongoose.createConnection(dbURL, {
        useMongoClient: true,
        /*
        // tried these settings too
        user: 'myUserName',
        pass: 'myPassword',
        connectTimeoutMS: 30000,
        rs_name: 'myReplSetName',
        ssl: true,
        auto_reconnect: true,
        */
      });

      let UserSchema = new mongoose.Schema({
        name: String,
      });

      let User = mongoose.model('User', UserSchema);
      let newUser = new User({name: 'username'});
      let createdUser = await newUser.save();

      // just ending test without validating any results
      t.end();

  } catch (err) {
    log.error(err);
  }

});

И выдает следующую ошибку:

/mypath/node_modules/mongodb/lib/replset.js:390 process.nextTick(function() { throw err; })
                                    ^
MongoError: connection 8 to cluster0-shard-00-02-c4nst.domain.com:27017 closed at Function.MongoError.create (/mypath/node_modules/mongodb-core/lib/error.js:29:11)
at Socket.<anonymous> (/mypath/node_modules/mongodb-core/lib/connection/connection.js:202:22)
at Object.onceWrapper (events.js:316:30)
at emitOne (events.js:115:13)
at Socket.emit (events.js:210:7)
at TCP._handle.close [as _onclose] (net.js:549:12)`

Я могу ошибаться здесь, но для меня это не похоже на проблему асинхронности/обещания;

Я использую Mongo Atlas. Когда я использую {useMongoClient: true}, мое приложение успешно подключается к базе данных, но база данных не отвечает на приложение, так?

Мой код:
mongoose.connect(config.dbhost, {useMongoClient: true}, function(err){ if(err){ console.log(err); } else { console.log('connected to the database successfuly.'); } });

Просто уведомление для всех, потому что я не видел упоминания об этом здесь: 4.11.1 был выпущен, и после беглого просмотра кажется, что проблема с буферизацией при использовании useMongoClient=true была исправлена. Завтра еще протестирую. Кто-нибудь еще?

Каково окончательное решение?

Это сработало для меня (v.4.11.1):

база данных.js

mongoose.connect(databaseUri, { useMongoClient: true })
      .then(() => console.log(`Database connected at ${databaseUri}`))
      .catch(err => console.log(`Database connection error: ${err.message}`));

user.model.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const userSchema = new Schema({ ... });
const User = mongoose.connection.model('User', userSchema);

ОБНОВИТЬ

Ссылка на соединение может не понадобиться при инициализации вашей модели (спасибо, @kyrylkov @peterpeterparker):

user.model.js

const User = mongoose.model('User', userSchema);

Может ли кто-нибудь кратко объяснить, для чего именно { useMongoClient: true } или что делает этот флаг?

Я немного растерялся, в чем преимущество его использования?

Я имею в виду, как я уже говорил, я мог бы жить с предупреждением, поэтому я не чувствую спешки с добавлением этого параметра.
Не нашел этого в документе, заранее спасибо за прояснение этого.

@ Blackbaud-SteveBrush Это не работает. Я использую Mongo Atlas. Почему это не работает?

@Thinkdiff

Не работает как? У нас это работает на mLab и MongoDB Atlas с обычным:

const User = mongoose.model('User', userSchema);

вместо:

const User = mongoose.connection.model('User', userSchema);

Если я попытаюсь включить параметр useMongoClient с несколькими хостами, определенными в URI, он зависнет, а затем выдаст ошибку:
MongoError: no mongos proxy available at Timeout._onTimeout (/home/ubuntu/code/pss/node_modules/mongoose/node_modules/mongodb-core/lib/topologies/mongos.js:636:28) at ontimeout (timers.js:386:14) at tryOnTimeout (timers.js:250:5) at Timer.listOnTimeout (timers.js:214:5) name: 'MongoError', message: 'no mongos proxy available'
URI: mongodb://10.0.1.49 , 10.0.2.158, 10.0.3.84/pss
параметры: {useMongoClient: true, autoReconnect: true, keepAlive: 300000, connectTimeoutMS: 30000}

Для всех, кто заинтересован, вот документы Mongoose по параметру useMongoClient : http://mongoosejs.com/docs/connections.html#use -mongo-client

«Логика подключения Mongoose по умолчанию устарела с версии 4.11.0… Это устаревание связано с тем, что драйвер MongoDB устарел от API, который имеет решающее значение для логики подключения mongoose для поддержки MongoDB 3.6, см. эту проблему github для получения более подробной информации». Вот проблема GitHub: https://github.com/Automattic/mongoose/issues/5304

@ Blackbaud-SteveBrush спасибо за указание на то, что наш. Так что если я правильно понимаю

useMongoClient = true => активировать новую логику соединения, которая также будет работать с Mongo 3.6.
useMongoClient = false => значение по умолчанию. старая логика подключения < 4.11.0. тот, который устарел.

правильно?

@Blackbaud-SteveBrush о вашем фрагменте кода, в моем случае я не использую

const User = mongoose.connection.model('User', userSchema);

но

const User = mongoose.model('User', userSchema);

и все же удалось. Спасибо

У меня работает Mongoose 4.10.8 :|

Я обнаружил, что это, вероятно, ошибка с мангустом

проблема ушла после отката версии мангуста

npm удалить -сохранить мангуста
npm установить -сохранить мангуст @ 4.10.8

Я полностью проигнорировал это предупреждение, и все работает так, как ожидалось. Может быть, это решение на данный момент. Просто не обращай внимания.

откат к 4.10.8 заставил мое соединение снова работать, но я все еще получаю сообщение об ошибке

Db.prototype.authenticate method will no longe against users in the admin db and will no long connect with auth credentials.

@peterpeterparker правильно. Насколько я понимаю, текущий код аутентификации Mongoose не будет работать в mongodb 3.6, поэтому useMongoClient означает, что мы пытаемся опередить эту проблему, сохраняя при этом обратную совместимость. Насколько я знаю, для mongodb 3.6 пока нет запланированной даты выпуска, поэтому переход не актуален.

@adamreisnz у нас было несколько ошибок, но на самом деле новая логика подключения представляет собой очень тонкую оболочку вокруг использования функции MongoClient.connect() собственного драйвера, которая уже пару лет является предпочтительным методом подключения к mongodb. Как только ваше соединение установлено, его та же логика драйвера mongodb поддерживает соединение. useMongoClient должен влиять только на начальное соединение.

@vkarpov15 Большое спасибо за объяснение и, конечно же, за работу, очень ценю!

@ vkarpov15 спасибо, я попробую и переключусь на использование useMongoClient и посмотрю, куда это нас приведет.

const мангуст = требуют ("мангуст");
const db = " mongodb://localhost/testaroo ";

мангуст. соединение. openUri (дб);
mongoose.connection.once ("открыть", функция () {
console.log("соединение установлено");
}).on("ошибка", функция (ошибка) {
console.log(ошибка);
})

--я использую это и ошибок не обнаружено

var mongoose = require('mongoose');
mongoose.Promise = global.Promise;

var mongoDB = mongoose.connect('mongodb://your_database', {
    useMongoClient: true
});

mongoDB
    .then(function (db) {
        console.log('mongodb has been connected');
    })
    .catch(function (err) {
        console.log('error while trying to connect with mongodb');
    });

module.exports = mongoDB;

Я использую это, и ошибок не обнаружено

@vitorbarros Это сработало для меня. Спасибо!

Меня устраивает:
http://mongoosejs.com/docs/connections.html#use-mongo-client

Я провел этот быстрый тест, и он сработал:

// index.js
const mongoose = require('mongoose')
mongoose.Promise = global.Promise;
const db = mongoose.createConnection(`mongodb://localhost/test`)

db.on('error', err => console.log(err))
db.once('open', () => {
  console.log(`Connected to Mongo at: ${new Date()}`)
  db.close(() => {
    console.log(`Disconnected from Mongo at: ${new Date()}`)
  })
})

то node index.js дает мне:

Connected to Mongo at: Thu Jul 13 2017 22:54:50 GMT+0000 (UTC)
Disconnected from Mongo at: Thu Jul 13 2017 22:54:50 GMT+0000 (UTC)

Спасибо вам всем!

@vitorbarros ваше решение работает! Благодарю.

Я могу подтвердить, что с 4.11.3 замена логики соединения на то, что предложил @vitorbarros , удаляет предупреждения и, кажется, работает хорошо 👍

Нет необходимости рефакторить ссылки на модели, как было предложено ранее в этой ветке.

Решение @vitorbarros действительно рекомендуется в соответствии с документацией "The useMongoClient Option" .

Однако обратите внимание, что mongoose.Promise = global.Promise; _не_ обещает базовый драйвер Mongo . Согласно документации «Promises for the MongoDB Driver» , свойство promiseLibrary также должно быть установлено в объекте параметров метода connect .

Например:

var mongoDB = mongoose.connect('mongodb://your_database', {
    useMongoClient: true,
    promiseLibrary: global.Promise
});

global.Promise будет использовать собственный механизм обещаний. Естественно, также можно использовать Bluebird или любой другой движок, например, promiseLibrary: require('bluebird')

Решение @vitorbarros работает для меня. А также нам нужно использовать promiseLibrary, как сказал @boaz-amit.
Но какой способ лучше всего использовать данные аутентификации?
В URL

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

или лучше установить пользователя и пароль в настройках? Не могу пока найти подходящее место.

Это только один из способов аутентификации?

И вот мое решение. Это также работает, даже если первое подключение не удалось.

let firstConnectTimeout = null;
const mongoConnect = () => {
    const mongoDB = mongoose.connect('mongodb://localhost/test', {
        useMongoClient: true
    });

    mongoDB
        .then((db) => {
            clearTimeout(firstConnectTimeout);
        })
        .catch((err) => {
            firstConnectTimeout = setTimeout(mongoConnect, 5000);
        });
};

mongoConnect();

Это должно быть в URL-адресе, параметры пользователя/пароля больше не работают.
useMongoClient правда, которую я нашел.

Пн, 17 июл, 2017, 20:28 Андрей Присняк[email protected]
написал:

Решение @vitorbarros https://github.com/vitorbarros работает для меня. А также
также нам нужно использовать promiseLibrary, например @boaz-amit
https://github.com/boaz-amit сказал.
Но какой способ лучше всего использовать данные аутентификации? В URL
mongodb://[ имя пользователя:пароль@
]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
или лучше установить пользователя и пароль в настройках? Я не могу найти подходящее место для
сейчас.


Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/Automattic/mongoose/issues/5399#issuecomment-315694642 ,
или заглушить тему
https://github.com/notifications/unsubscribe-auth/AAd8Qup1YY4lhUhQccv2kLKtraARxvP0ks5sOxs_gaJpZM4OEnIt
.

@adamreisnz @aprisniak работает над этим, см. #5419. А пока введите имя пользователя и пароль в свой URI: mongodb://user:pass<strong i="7">@hostname</strong>:port/db

Кроме того, я написал сообщение в блоге об этой опции и о том, почему она необходима: http://thecodebarbarian.com/mongoose-4.11-use-mongo-client.html .

@vkarpov15 vkarpov15 Я использую user:pass в URI, но все равно получаю предупреждение.

Для тех, кто использует мангуст с gridfs-stream:

const mongooseConnect = mongoose.connect(
    process.env.MONGODB_URI || process.env.MONGOLAB_URI,
    {
        useMongoClient: true
    }
)

let gfs
mongooseConnect.then(conn => {
    gfs = Grid(conn.db)
    /** Setting up GFS storage here */
})

Не могли бы вы, ребята, добавить отсутствующую опцию соединения «useMongoClient» в typescript typings и добавить типизации обратно в этот проект вместо добавления пакетов типизации.

Я не уверен, должен ли я что-то делать с этим предупреждением или нет? Это будет исправлено, верно?

Я просто добавляю useMongoClient в наборы текста, чтобы он работал. @iamdubx

@FinalDes как? Я добавил mongoose.connect(process.env.DATABASE, { useMongoClient: true }) , но все равно получил сообщение. И я использую user:pass в URI

Лучший способ избавиться от такой проблемы — использовать эти две команды:
npm удалить -сохранить мангуста
npm установить -сохранить мангуст @ 4.10.8

NB: [email protected] — стабильная версия.

Как вы все справляетесь с созданием своей схемы и модели, а также с доступом к ним?

Я пробовал все исправления в потоке. С предупреждением все работает нормально. Как только я пытаюсь использовать useMongoClient: true или mongoose.createConnection , предупреждение исчезает, и я могу подключиться к базе данных, однако любой код, который пытается получить доступ к модели, не срабатывает. Ошибок нет, код просто не запускается.

@iamdubx
просто отсутствует типизация, поэтому при запуске с "noImplicitAny": true не будет ошибки

импортировать мангуст = требовать ("мангуст");
импортировать dotenv = требовать ("dotenv");
dotenv.config();
mongoose.Promise = global.Promise;
const MONGO_URI=`mongodb://${process.env.MONGODB_HOST}:${process.env.MONGODB_PORT}/${process.env.MONGODB_DB}`;
mongoose.connect (MONGO_URI, {
использованиеMongoClient: правда,
});

@FinalDes , о чем ты говоришь? Какие пропущенные типизации? У меня тот же код выше и есть ошибка.

Я столкнулся с той же проблемой с @Snow-Okami.

  1. const mongoDB = mongoose.connect(config.database, { useMongoClient: true });
    Это избавляет от предупреждения и подключается к базе данных. Однако все, что пытается получить доступ к модели, терпит неудачу (получение/публикация). Ошибка не возвращается.
  2. const mongoDB = mongoose.connect(config.database, function(){ useMongoClient: true });
    И это дает эти два предупреждения, но все остальное работает нормально.

Пожалуйста, по крайней мере дайте обратную совместимость, наш сервер производственной сборки выходит из строя.
обновление функций — это хорошо, но не меняйте сигнатуру или вызов метода.

@Nikunjksanghavi Это всего лишь предупреждение, ничего не должно выйти из строя.

@iamdubx что за ошибка?

Ошибка устаревания @FinalDes , о чем еще мы говорим в этой теме?

Это сработало для меня: (v.4.11.4)

const MONGO_URI = process.env.MONGO_URI
const mongoose = require('mongoose');

// Use your own promis library
mongoose.Promise = require('bluebird');

// connect to mongo, use Mongo Client
mongoose.connect(MONGO_URI, {useMongoClient: true})
  .then(({db: {databaseName}}) => console.log(`Connected to ${databaseName}`))
  .catch(err => console.error(err));

const poemSchema = mongoose.Schema({
    name: String,
    text: String
});

const Poem = mongoose.model('Poem', poemSchema);

const insertPoem = poem =>
  (new Poem(poem)).save( (err, newPoem) => 
    console.log(err || newPoem));

insertPoem({name: 'poemName', text: 'this is a poem'})

// подключение к БД
var мангуст = требуют ('мангуст');
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://localhost/login_register', {
использованиеMongoClient: правда
})
.then(() => console.log('соединение успешно'))
.catch((ошибка) => console.error(ошибка));
// завершение соединения с БД

Это не работает для меня. У меня все еще есть консольное предупреждение. И никаких внятных объяснений не дают.

Мангуст ужасен. Также худший сайт документации, который я видел в столь популярных библиотеках. Какой позор!

Сейчас думаю перейти на RethinkDB. Linux Foundation — это серьезно.
Также Postgre потрясающий.

Монго - очень и очень стыдно.

@iamdubx вы пробовали мое решение выше? Не могли бы вы вставить предупреждение на это? Может быть, я мог бы помочь :)

@iamdubx может опубликовать ваше предупреждающее сообщение?

@FinalDes @shams-ali Я писал ранее, это та же ошибка устаревания, что и в теме. О котором эта тема!

(node:3304) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0, use `openUri()` instead, or set the `useMongoClient` option if using `connect()` or `createConnection()`. See http://mongoosejs.com/docs/connections.html#use-mongo-client
Server listening on port: 7777
Db.prototype.authenticate method will no longer be available in the next major release 3.x as MongoDB 3.6 will only allow auth against users in the admin db and will no longer allow multiple credentials on a socket. Please authenticate using MongoClient.connect with auth credentials.

@iamdubx интересно, это то же предупреждение, что и у меня, и опубликованное выше решение, похоже, исправило его для меня. Не могли бы вы вставить обновленный код, который не работает?

Вот что сработало для меня:

// ES6 promises
mongoose.Promise = Promise;

// mongodb connection
mongoose.connect("mongodb://localhost:27017/sandbox", {
  useMongoClient: true,
  promiseLibrary: global.Promise
});

var db = mongoose.connection;

// mongodb error
db.on('error', console.error.bind(console, 'connection error:'));

// mongodb connection open
db.once('open', () => {
  console.log(`Connected to Mongo at: ${new Date()}`)
});

@afoke работает, спасибо

@FinalDes Добро пожаловать, приятель.

Это мой новый рабочий процесс, пытающийся соответствовать предупреждениям и устареваниям:

// db.js
const model = require('./model');
const mongoose = require('mongoose');
mongoose.Promise = global.Promise;


async function db(uri) {
  const con = await mongoose
    .createConnection(uri, {
      useMongoClient: true,
    });

  const {User} = model(con);

  // do something with User
  ...

  // the interface for the server
  return {
    create: params => User.create(params),
    ...
  };
}


module.exports = db;

И теперь модуль моделей возвращает функцию подключения

// model.js
const {Schema} = require('mongoose');


const UserSchema = new Schema({
  name: String,
  age: Number,
});

// Other Schemas
...

module.exports = con => ({
  User: con.model('User', UserSchema),
  ...
});

Какие-нибудь официальные рекомендации по этому вопросу?

@iamdubx Похоже, вы не понимаете разницы между предупреждением и ошибкой .

Предупреждение , о котором идет речь, ничего не ломает, но предупреждает пользователя о чем-то, что будет удалено в следующем основном выпуске.

Мангуст ужасен.

Так что имейте в виду, что вы реагируете на то, что разработчики предупреждают вас заранее, прежде чем они удалят функцию. Я также призываю вас помнить, что вы используете это бесплатно, поэтому, возможно, дайте разработчикам презумпцию невиновности, прежде чем закатывать истерику.

@chrisdothtml

Предупреждение, о котором идет речь, ничего не ломает, но предупреждает пользователя о чем-то, что будет удалено в следующем основном выпуске.

Это загрязняет тесты и консоль, что немного раздражает.

Мангуст ужасен. Также худший сайт документации, который я видел в столь популярных библиотеках. Какой позор!

Он ведет себя невежливо, что также немного раздражает, но он делает очень правильное замечание в отношении документации Mongoose. Это не самая плохая документация, но ее действительно можно улучшить.

Тот факт, что mongoose пересылает клиентский API mongo. который работает совершенно по-другому, что делает использование и документацию Mongoose запутанными.

Возможным решением для этого будет:

  • перестань делать это
  • удалить документацию для клиентских методов Mongo
  • предоставить способ поделиться соединением между официальным клиентом и Mongoose

Я бы также предложил улучшить возможности поиска по документам, разбив его на несколько страниц и предоставив новым пользователям больше информации о том, что на самом деле делает Mongoose для достижения некоторых результатов.

У меня была эта ошибка, но она исчезла после того, как я добавил параметр {useMongoClient: true}.
Я использую Debian 9, тестовая версия, с MongoDb ver. 3.2.11 и мангуст вер. 4.10.4.
У меня есть сообщение «Подключено к MongoDB» (см. код в машинописном тексте ниже), все работает отлично.

(<любой>мангуст).Promise = global.Promise;
mongoose.connect(process.env.MONGODB_URI, {useMongoClient: true});
const db = mongoose.connection;
db.on('ошибка', console.error.bind(консоль, 'ошибка подключения:'));
db.once('открыть', () => {
console.log('Подключено к MongoDB');
установить маршруты (приложение);
app.get('/*', function(req, res) {
res.sendFile(path.join(__dirname, '../public/index.html'));
});
app.listen(app.get('порт'), () => {
console.log('MyApp прослушивает порт' + app.get('port'));
});
});

Просто удалите текущую версию мангуста, которая у вас есть, и установите более низкую версию npm install [email protected] --save . Не нужно ничего делать, это определенно сработает для вас.

mongoose.connect(database.host, { useMongoClient: true });

Это решило мою проблему. Но после внесения этого изменения у меня появилось еще одно предупреждение.

Предупреждение об устаревании: Mongoose: mpromise (библиотека обещаний по умолчанию для мангуста) устарела, вместо этого подключите свою собственную библиотеку обещаний: http://mongoosejs.com/docs/promises.html

Этот код решает все предупреждения об устаревании:
```javascript
mongoose.Promise = global.Promise;
mongoose.connect (ури, {
KeepAlive: правда,
попытки повторного подключения: Number.MAX_VALUE,
использованиеMongoClient: правда
});
````
Подробнее по ссылке -> http://mongoosejs.com/docs/connections.html#use -mongo-client

@bricss Фантастика! Спасибо!

@bricss Ты сделал мой день.

кто-то получил значок героя...

редактировать: @bricss Это устранило предупреждения об устаревании для меня, но я не мог получить данные из своих песочниц mLab. Возможно, это связано с тем, что они используют более старую версию MongoDB. Я постараюсь проверить это позже.

edit: @bricss Теперь он работает правильно с последней версией mongoose 4.11.9 и подключением к Cosmos DB в Azure.

@bricss : Отлично сделано, Кирпичи! У меня это сработало, хотя я использую очень старую версию mongodb в своем локальном :+1:

@bricss Офигенно! Но вы можете подумать о том, чтобы указать меньшее число для «reconnectTries». Вы не хотите тратить целый день на повторное подключение, если есть проблема с вашей БД.

Решение @afoke сработало для меня, только когда я явно объявляю базу данных в строке подключения, т.е. mongodb://localhost:27017/test , но не mongodb://localhost:27017

Могу ли я создать подключение к 2 БД без этого предупреждения? Мне нужно использовать мои модели с разными БД.

При использовании mongoose v^4.11.6 при добавлении useMongoClient предупреждение исчезало.

const uri = "http://blablabla.blo/blaDB"; mongoose.Promise = global.Promise; mongoose.connection.on('error', (err) => { console.error( Ошибка подключения Mongoose: ${err}`);
процесс.выход(1);
});
mongoose.connect(uri, {useMongoClient: true});

 // load models
 require('./model1');
 // ...
 require('./modelN');`

подключение к базе данных таким образом решает проблему:
mongoose.connect (url, {пользователь: 'имя пользователя', пароль: 'мой пароль', useMongoClient: true});

Будут ли эти ошибки вызывать проблемы, например, в безопасности?

Если я использую этот синтаксис, больше не появляется «устаревшее» предупреждение 🎉

mongoose.connection.openUri('mongodb://localhost/test')
  .once('open', () => console.log('Good to go !'))
  .on('error', (error) => {
    console.warn('Warning', error);
  });

Я столкнулся с тем же предупреждением об устаревании, как показано ниже:
(узел: 2300) Предупреждение об устаревании: open() устарело в mongoose >= 4.11.0, вместо этого используйте openUri() или установите параметр useMongoClient при использовании connect() или createConnection() . См. http://mongoosejs.com/docs/connections.html#use -mongo-client.

Решение

Я попробовал следующее, и он отлично работает. Не выдает предупреждений об устаревании.

mongoose.connect('mongodb://127.0.0.1:27017/имя_вашей_базы_данных', {useMongoClient: true, promiseLibrary: global.Promise});

Надеюсь, это поможет всем, кто сталкивается с этой проблемой.

У меня та же проблема, но при попытке подключиться к службе Mongo Atlas она просто не подключается с опцией {useMo ngoClient:true }, и без нее соединение больше не выполняется.

Кто-нибудь с такой же проблемой?

Я решил свою проблему, просто изменив mongoose.connect на mongoose.createConnection

mongoose.createConnection(config.uri, (ошибка) => {
если (ошибка) {
console.log('Не удалось подключиться к базе данных: ', ошибка);
} еще {
console.log('Подключено к базе данных: ' + config.db);
}
});

Я решил эту проблему так (Mongoose 4.12.0, NodeJS - 7.10.1)

mongoose.Promise = require('bluebird');
mongoose.connect('mongodb://localhost:27017/books_exchange', {
  useMongoClient: true,
  promiseLibrary: require('bluebird')
}).then(() => {
  var userSchema = new mongoose.Schema({
    name: String,
    password: String
  });
  var User = mongoose.model('User', userSchema);

  var person = new User({
    name: "John",
    password: "qwerty"
  });

  person.save().then(() => {
    console.log('Data saved');
  }).catch(e => {
    console.log(e);
  });
}).catch(e => {
  console.log('Error while DB connecting');
  console.log(e);
});
Была ли эта страница полезной?
0 / 5 - 0 рейтинги