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
У меня есть модели графовых данных, определенные в «graph-data-models.js».
... const driver = neo4j.driver( ... ); const ObjectGraphMap = new OGM({ typeDefs, driver }); const Challenge = ObjectGraphMap.model("Challenge"); ...
Экспресс-сервер на «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); }
Определения API в «api.js»
...
app = express()
...
app.get("/challenges", getChallenges);
...
- Модели данных, используемые в «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. Проверьте это и это тоже.