@jekmurod

MongoDB и NodeJs?

почему то мне не строку функция пишет undefined может функция неправильно но сделал ?
function checkUserIdentity(lg) {
	MongoClient.connect('mongodb://адрес', function (err, db) {
		if (err)
			throw err;
		var collection = db
			.collection('client')
			.findOne({
				login : lg
			}, function (err, docs) {
				if (docs) {
					return docs._id;
				}else {
					return "not exist";
				}
			})
	});
}


когда я делаю console.log(checkUserIdentity("")) // ответ undefined

но когда я делаю так без функции

MongoClient.connect('mongodb://адрес', function (err, db) {
		if (err)
			throw err;
		var collection = db
			.collection('client')
			.findOne({
				login : lg
			}, function (err, docs) {
				if (docs) {
					return docs._id;
				}else {
					return "not exist";
				}
			})
	});


все в порядке почему-то функция не возвращает

в чем может быть проблема ?
  • Вопрос задан
  • 394 просмотра
Решения вопроса 1
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
function checkUserIdentity(lg, callback) {
  MongoClient.connect('mongodb://адрес', function (err, db) {
    if (err) throw err;
    db.collection('client').findOne({ login : lg }, function (err, docs) {
      if (docs) callback(null, docs._id);
      else callback(new Error("not exists"));
    });
  });
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@tex0
когда я делаю console.log(checkUserIdentity("")) // ответ undefined

Ну во первых сама ваша функция ничего не возвращает. Поэтому и undefined.

Во вторых я подозреваю что return в callback-функции бесполезен ибо функцией-хостом(MongoClient.connect) не предусмотрено получение данных от callback через оператор return. Ну и в третьих - всё это (кроме вашей самописной функции) работает в асинхронном режиме. Т.е. управление в ф-ю checkUserIdentity передается сразу же после вызова MongoClient.connect и результат выполнения коннекта вы получите неизвестно когда.
Меняйте подход к архитектуре. Начните думать асинхронно =)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы