如何将 mongodb 信息返回到 hapi.js 路由处理程序中的浏览器?

普威尔考克斯

我刚刚开始使用 hapi.js (^17.3.1) 和 mongodb (^3.0.7),以及异步 js 代码。

在路由处理程序中,我试图从数据库中检索数据。作为测试,我将一个字符串存储在通过循环访问数据库集合记录构建的变量“s”中。浏览器的预期输出是

开始 dbInfo1 dbInfo2 dbInfoN 结束

我已经尝试了这段代码的各种版本:

module.exports = {
    method: 'GET',
    handler: async function (request, reply) { 
        return await getRoutes();
    }       
}

async function getRoutes() {

    var s = "start";
    const mongo = require('mongodb').MongoClient;
    const mongoUrl = "mongodb://127.0.0.1:27017/";

    return // I'm returning this whole thing because hapi.js says it wants a promise. (500 error)
        await mongo.connect(mongoUrl)
        .then(function(client) {

            client.db("dbName").collection("collectionName")
            .find({})
            .forEach(function (record) {
                console.log(record.item);
                s += " | " + record.item;      
            });

            s + " end";  // But I've tried placing "return" here (500 error)

        });
        // I've also tried ".then(function(s) { return s + 'end' }) here but it seems to only have the same set of options/problems manifest.

        // I've also made it so that I place "return s + 'end'" here (displays "start end" with nothing in the middle).

}

我试过将 return 语句放在不同的地方。我要么在控制台中收到 http 500 错误

调试:内部、实现、错误
错误:处理程序方法没有返回值、承诺或抛出错误
dbInfo1
dbInfo2
dbInfoN

如果我返回承诺本身或从承诺内部返回,或者我得到

开始结束

如果我从承诺之外返回,则在浏览器中。

无论哪种情况,console.log 语句都会打印出 dbInfos 输出。

我尝试了 async 和 await 的不同放置、包含和省略,结果几乎相同。我还尝试使用“new Promise(...”) 将 getRoutes 中返回的内容包装到显式 Promise 中。在这种情况下,控制台会记录 dbInfos,但浏览器挂起。

在返回变量 s 之前,如何等待“foreach”函数?

普威尔考克斯

最后!得到它与此代码的工作:

module.exports = {
    method: 'GET',
    handler: function (request, reply) { 
        return getRoutes();
    }
}

function getRoutes() {

    const mongo = require('mongodb').MongoClient;
    const mongoUrl = "mongodb://127.0.0.1:27017/";

    return mongo.connect(mongoUrl)
        .then(async function(client) {

            var s = "start";

            var documents = await 
                client.db("dbName").collection("collectionName")
                .find()
                .toArray();

            for (const doc of documents) 
                s += " | " + await doc.item;      

            return s + " end";

        });

}

问题是我认为由于“getRoutes”被标记为“async”,“.then”中的内容也是异步的。但我真的需要将“函数(客户端)”标记为“异步”。我还需要停止使用“forEach”并在集合上使用更传统的迭代。

我之前实际上已经将“function(client)”标记为“async”,但这是出于盲目的反复试验,所以我从未正确使用过“await”。直到我阅读了 Anton Lavrenov 的这篇博客,我才真正开始理解它

虽然我最近才问这个问题,但在那之前我已经研究了很长时间。对我现在所处的位置真的很满意。当然,感谢@desoares 指出我在上面使用的代码版本中的愚蠢错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何用hapi js返回mongodb查询结果

来自分类Dev

如何从hapi.js路由处理程序之外进行回复

来自分类Dev

如何将Hapi.js插件应用于特定路由?

来自分类Dev

如何使用Hapi.js连接到MongoDb?

来自分类Dev

Hapi JS 路由处理程序中的 JS 变量范围

来自分类Dev

如何将结果从模型返回到Node.js中的控制器

来自分类Dev

如何将PostgreSQL与hapi.js连接

来自分类Dev

如何将PostgreSQL与hapi.js连接

来自分类Dev

MongoDB(Node.js)将数据返回到数组

来自分类Dev

节点js Hapi js和heroku如何处理https

来自分类Dev

如何在Vue.js应用程序中处理浏览器刷新

来自分类Dev

如何在 Hapi.js 的预处理程序中抛出错误

来自分类Dev

如何将返回的值推入数组mongodb中?

来自分类Dev

如何在hapi.js中实现通配符子域

来自分类Dev

如何在Hapi.Js中获取完整的URL?

来自分类Dev

如何在hapi.js中实现Joi验证?

来自分类Dev

如何将对象从浏览器环境返回到Puppeteer中的Node环境?

来自分类Dev

如何将列中的值从 StarBasic 返回到 Calc

来自分类Dev

如何将反应钩子返回到组件中

来自分类Dev

为什么Hapi.js POST处理程序返回空的有效载荷?

来自分类Dev

删除项目后单击浏览器“后退”按钮,jQuery Mobile listview详细信息页面将返回到已删除项目的详细信息视图

来自分类Dev

使用Hapi时如何将路由存储在单独的文件中?

来自分类Dev

Hapi.js中的“挂载”(运行)旧式HTTP处理程序

来自分类Dev

如何使用NearSphere MongoDB驱动程序C#将距离结果返回到点

来自分类Dev

将插件选项注入到单独文件中定义的 Hapi 路由处理程序的模式

来自分类Dev

hapi.js处理错误的最佳方法

来自分类Dev

如何将React js应用程序正确连接到MongoDB数据库

来自分类Dev

如何将MongoDB查询从Node.js驱动程序格式转换为Mongoose格式

来自分类Dev

Hapi js导出服务器变量

Related 相关文章

  1. 1

    如何用hapi js返回mongodb查询结果

  2. 2

    如何从hapi.js路由处理程序之外进行回复

  3. 3

    如何将Hapi.js插件应用于特定路由?

  4. 4

    如何使用Hapi.js连接到MongoDb?

  5. 5

    Hapi JS 路由处理程序中的 JS 变量范围

  6. 6

    如何将结果从模型返回到Node.js中的控制器

  7. 7

    如何将PostgreSQL与hapi.js连接

  8. 8

    如何将PostgreSQL与hapi.js连接

  9. 9

    MongoDB(Node.js)将数据返回到数组

  10. 10

    节点js Hapi js和heroku如何处理https

  11. 11

    如何在Vue.js应用程序中处理浏览器刷新

  12. 12

    如何在 Hapi.js 的预处理程序中抛出错误

  13. 13

    如何将返回的值推入数组mongodb中?

  14. 14

    如何在hapi.js中实现通配符子域

  15. 15

    如何在Hapi.Js中获取完整的URL?

  16. 16

    如何在hapi.js中实现Joi验证?

  17. 17

    如何将对象从浏览器环境返回到Puppeteer中的Node环境?

  18. 18

    如何将列中的值从 StarBasic 返回到 Calc

  19. 19

    如何将反应钩子返回到组件中

  20. 20

    为什么Hapi.js POST处理程序返回空的有效载荷?

  21. 21

    删除项目后单击浏览器“后退”按钮,jQuery Mobile listview详细信息页面将返回到已删除项目的详细信息视图

  22. 22

    使用Hapi时如何将路由存储在单独的文件中?

  23. 23

    Hapi.js中的“挂载”(运行)旧式HTTP处理程序

  24. 24

    如何使用NearSphere MongoDB驱动程序C#将距离结果返回到点

  25. 25

    将插件选项注入到单独文件中定义的 Hapi 路由处理程序的模式

  26. 26

    hapi.js处理错误的最佳方法

  27. 27

    如何将React js应用程序正确连接到MongoDB数据库

  28. 28

    如何将MongoDB查询从Node.js驱动程序格式转换为Mongoose格式

  29. 29

    Hapi js导出服务器变量

热门标签

归档