在Neo4j GraphQL Express Server上初始化OGM时未处理PromiseRejection

y4ekin9u  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(149)

我用的是Neo4j graphql。
在我的代码中看到这个异常而没有特定的行指示。

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");
 ...
  1. Express服务器位于**“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);
}
  1. 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(() => {
    ...
    })
...

并不能解决问题

xvw2m8pv

xvw2m8pv1#

我在回溯了我所做的所有步骤后发现了这个问题。不幸的是,这与我发布的任何细节都无关。部分原因是我花了这么长时间来调试。
然而,这并不是真正的解决方案。我在schema上添加了一个字段(用于示例化驱动变量typeDefs)。ObjectGraphMap.init()失败可惜的是,Neo4j还没有与graphql灵活的模式集成。它可能没有那么糟糕,因为它可以变得非常动态和容易出错,而无需硬修复模式。

**PS:**Stacktrace需要改进。实际上并不接受这个答案,因为ES上似乎有一些问题需要解决。检查这个out和这个too

相关问题