Как сделать мой код проще с базой данных (mongodb)? - PullRequest
0 голосов
/ 08 февраля 2019


Я обычно работаю с Java.
Я так запутался, что привык кодировать с node.js.

Среда: express + mongoose

КогдаЯ пытаюсь использовать свои данные из базы данных, я обычно делаю свой код с дао-шаблоном.

Если я предполагаю вызвать две переменные из каждой таблицы в базе данных,

ex)
String title = user_dao.getData("title");
String code = book_dao.getData("code");

Однако язнал, что узлы не могут использовать его таким образом.Когда я вызываю две переменные, как указано выше:

database.UserDaoModel.get(options, function(err, results) {
    var title = results._doc.title;

    database.BookDaoModel.get(options, function(err, book_results) {
        var code = book_results._doc.code;

Как видите, я должен определить новую строку для BookDaoModel ..., чтобы получить значение кода. Я думаю, что это действительно неэффективно.Приведенный выше пример просто вводит две данные, но вы знаете, что нам нужно добавить больше функций для метода 5 или 6?

  • подтверждение пользователя
  • проверка устройства
  • и т. Д. *

Есть ли способ использовать даос-шаблонЯ использовал в Java в узле?

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

Я хочу завершить все это в одну строку.

1 Ответ

0 голосов
/ 08 февраля 2019

Вам нужно обернуть свои функции обещаниями, например:

function get(db,model,options){
    return new Promise((res,rej) => {
        db[model].get(options,(err,val) => {
            if (err) rej(err);
            res(val);
        }
    });
}

, а затем:

async function run(){
    const results = await Promise.all([
        get(database,"UserDaoModel",options),
        get(database,"BookDaoModel",options)
    ]);
    const title = results[0]._doc.title,
        code = results[1]._doc.code;
}

Вы можете добавить любое количество значений в Promise.all ().и получает доступ к ним в массиве результатов.(Я забыл сказать, но, конечно, вам нужно вызвать функцию run ())

...