Возникли проблемы с вызовом внешних функций - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть сервер API, основанный на nodejs, подключенный к базе данных MySQL с помощью пакета knex npm для действий с базой данных (CRUD), и выражение для обработки запросов и ответов,

представьте, что у меня есть файл контроллера, которыйделая вставку в базу данных:

внутри этого файла я получаю home_name как req.body и генерирую новый идентификатор и вставляю его в базу данных:

.. / controller / home.controller.js

var idGenerator = require('../utils/idGenerator');
var home = {
              id: idGenerator.generateID(), 
              name: req.body.name
           };

, а generateID - это экспортируемая функция, которая проверяет последний сгенерированный идентификатор в базе данных, и если он есть, то +1 и возврат в противном случае генерируют новый случайный.

.. / utils / idGenerator.js

function generateID() {
  knex('home').select("max(id)" as lastID)
    .then((lastID) => {
      if (lastID) {
        return parseInt(lastID) + 1;
      } else {
         //Generate new ID and return
      }
    })
}

module.exports.generateID = generateID

id: idGenerator.generateID не определено

Как решить эту проблему?

1 Ответ

0 голосов
/ 18 декабря 2018

так что это асинхронная проблема.проблема в том, что ваша generateID() функция является асинхронной, так как она выполняет вызов БД.Вы не ждете асинхронизации от контроллера перед обработкой.Вы МОЖЕТЕ сделать что-то вроде этого:

var idGenerator = require('../utils/idGenerator')
idGenerator.generateID().then(id => {
    var home = {
          id: id 
          name: req.body.name
       };
    // If using mongoose, you need to call res.send() in this promise callback.
})
...