调用 mongodb 的天蓝色函数(节点)没有错误地完成,但没有从查询中返回 [英] azure function (node) calling mongodb finishes without error but nothing comes back from query

查看:10
本文介绍了调用 mongodb 的天蓝色函数(节点)没有错误地完成,但没有从查询中返回的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个节点函数调用 mongo 来请求一些数据.没有错误,但似乎也没有连接到 mongo 并获取数据.是不是我做的不对?

I have a node function that calls mongo to request some data. There is no error but it does not seem to connect to mongo and get the data either. Is there something I'm not doing right?

const MongoClient = require('mongodb').MongoClient;
module.exports = async (context, req) => {

try {
    let connectionString = 'mongodb://<username>:<password>@<endpoint>.documents.azure.com:10255/?ssl=true';
    context.log('******************** 11 *************************');
    MongoClient.connect(connectionString, {uri_decode_auth: true}, function(err, client) {
        if (err) {
            context.log('Failed to connect');
            context.res = { status: 500, body: err.message }
            return context.done();
        }
        context.log('******************** 22 *************************');
        client.db("stuff").collection("items").find({}).toArray(function(err, result) {
            if (err) {
                context.log('Error running query');
                context.res = { status: 500, body: err.message }
                return context.done();
            }
            context.log(result);
            context.log('******************** 44 *************************');
            let message = "Hello " + req.query.name + ". Have a nice day!.  Really...";
            context.res = {
                status: 200,
                headers: { 'Content-Type': 'application/json' },
                body: {"message": message}
            };
            context.done();
            client.close();
        });
        });
    }
    catch(error) {
        context.log('caught the error');
        context.log(error)
    }
};

我在 azure 日志中看到的输出是:

The output I see in azure logs is:

2018-10-26T12:38:07  Welcome, you are now connected to log-streaming service.
2018-10-26T12:38:17.218 [Information] Executing 'Functions.zap-search' (Reason='This function was programmatically called via the host APIs.', 
Id=e294fde0-d249-4237-a421-e85bde40f843)
2018-10-26T12:38:17.715 [Information] ******************** 11 *************************
2018-10-26T12:38:18.461 [Information] Executed 'Functions.zap-search' (Succeeded, Id=e294fde0-d249-4237-a421-e85bde40f843)

推荐答案

在使用 V2 的 Azure 函数时,您需要决定是使用 Promise 还是使用回调.您发布的代码是基于回调的,但由于使用 async 关键字并且由于未等待 MongoClient.connect 运行时退出您的函数,因此将其导出为承诺,然后再执行这些结果.如果您删除 async 关键字应该会开始看到所需的结果.

When using V2 of Azure functions you need to decide if you are going to be using promises or callbacks. The code you posted is callback based but exported as a promise because of the use async keyword and since the MongoClient.connect is not awaited the runtime exits your function before executing these results. If you remove the async keyword should start seeing the desired results.

这篇关于调用 mongodb 的天蓝色函数(节点)没有错误地完成,但没有从查询中返回的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆