如何将一个mongodb请求的结果同步传递到下一个请求的值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将一个mongodb请求的结果同步传递到下一个请求的值?相关的知识,希望对你有一定的参考价值。

我需要将我的第一个MongoDB查询中获得的state.name值放入下一组MongoDB查询中。当我第一次查询console.log时,我实现了所需的结果,但在以下查询中显示为undefined。它是异步还是我错了?

我研究了将一个查询的结果传递到Express + MongoDB中的下一个查询以及查看Promises的示例 - 不确定我是否完全理解它。

// GET State Home
router.get('/:stateid', ensureAuthenticated, (req, res) => {
    const member = req.user;
    console.log(member);
    Promise.all([
        state = States.findOne({url:req.params.stateid}),
        statelegislation = StateLegislation.find({'state': state.name }),
        statepolicy = StatePolicy.find({'state': state.name }),
        stateregulation = StateRegulation.find({'state': state.name }),
        statelitigation = StateLitigation.find({'state': state.name }),
    ]).then(([state,statelegislation,statepolicy,stateregulation,statelitigation]) =>
        res.render('app/state/home', {
            state:state,
            statelegislation:statelegislation,
            statepolicy:statepolicy,
            stateregulation:stateregulation,
            statelitigation:statelitigation,
        }))
        .catch(err => res.send('Ops, something has gone wrong'));
});

在以下查询中传入字符串值而不是变量state.name时,我会获得该值的所需结果。

我无法从第一个MongoDB请求动态传递值。

任何和所有帮助表示赞赏!

答案

你不能在一个Promise.all中立刻做到这一点。在开始剩余查询之前,您需要先等待state承诺:

router.get('/:stateid', ensureAuthenticated, (req, res) => {
    const member = req.user;
    console.log(member);
    States.findOne({url:req.params.stateid}).then(state =>
        Promise.all([
            StateLegislation.find({'state': state.name }),
            StatePolicy.find({'state': state.name }),
            StateRegulation.find({'state': state.name }),
            StateLitigation.find({'state': state.name }),
        ]).then(([statelegislation,statepolicy,stateregulation,statelitigation]) =>
            res.render('app/state/home', {
                state,
                statelegislation,
                statepolicy,
                stateregulation,
                statelitigation,
            })
        )
    )
    .catch(err => res.send('Ops, something has gone wrong'));
});

以上是关于如何将一个mongodb请求的结果同步传递到下一个请求的值?的主要内容,如果未能解决你的问题,请参考以下文章

mongodb:将上一个管道结果的数组引用到下一个管道中

mongodb:将上一个管道结果的数组引用到下一个管道中

nodejs中如何同步连接mongodb

jmeter正则表达式提取数据库查询多个字段的结果应用到下一个请求中?

我如何将 otp 对象从服务器传递到下一个活动

如何将 NsDictionary 值从 tableview 传递到下一个视图