UnhandledPromiseRejection при инициализации OGM на сервере Neo4j GraphQL Express

Я использую экспресс с Neo4jgraphql.

Видя это исключение без указания конкретных строк в моем коде.

      node:internal/process/promises:289
            triggerUncaughtException(err, true /* fromPromise */);
            ^

[UnhandledPromiseRejection: This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason "[object Array]".] {   code: 'ERR_UNHANDLED_REJECTION' }

Node.js v20.3.0
  1. У меня есть модели графовых данных, определенные в «graph-data-models.js».

             ...        
     const driver = neo4j.driver(
     ...
     );
    
     const ObjectGraphMap = new OGM({ typeDefs, driver });
     const Challenge = ObjectGraphMap.model("Challenge");
     ...
    
  2. Экспресс-сервер на «app.js» . Сервер должен стартовать отсюда. я бегуnode app.js.

            ...
    try {
        await ObjectGraphMap.init();
        app.listen(port, () => {
            logger.info(`Data API App listening at http://localhost:${port}`);
        });
    } catch(e) {
        logger.error("OGM init failed",e);
    }
    
  3. Определения API в «api.js»

      ...
app = express()
...
app.get("/challenges", getChallenges);
...
  1. Модели данных, используемые в «api-impl.js»
      ...
const getChallenges = async (req, res) => {
    try {
      ...  
      Challenge.find({
            ... }
        })
        .then((challenge) => {
           ...
        })
        .catch((err) => {
        ...
        });
    } catch (error) {
        ...
    } 
}
...

Мне кажется, это нечто большее, чем просто обертывание попытки ловли во всех местах. Как я могу отладить и выяснить проблему? OGM init нуждается в некоторых изменениях, но затем нужно поймать модель, например, «app.js» .

      ...
ObjectGraphMap.init()
    .then(() => {
    ...
    }) 
    .catch(() => {
    ...
    })
...

не режет.

1 ответ

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

Однако на самом деле это не решение. Я добавил поле в схему (которое используется для создания экземпляра драйвера - переменнойtypeDefs). Так,ObjectGraphMap.init()терпит неудачу. Увы, Neo4j (пока) не имеет гибкой интеграции схемы с графом. Это может быть не так уж и плохо, поскольку без жесткого исправления схемы он может стать довольно динамичным и подверженным ошибкам.

PS: Однако Stacktrace необходимо улучшить. На самом деле я не принимаю это как ответ, потому что, похоже, есть к чему обратиться по ES. Проверьте это и это тоже.

Другие вопросы по тегам