Сообщение хранилища очереди Azure не сохраняется в нужной очереди В функции Azure - PullRequest
0 голосов
/ 13 ноября 2018
const azure = require('azure-storage');
const queueService = azure.createQueueService("UseDevelopmentStorage=true");

module.exports = async function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');
    context.log('Request Headers = ' + JSON.stringify(req.headers));

    queueName = 'azurequeue';

    if ((req.query.parameter && req.query.func) || (req.body && req.body.parameter && req.body.func)) {

        var send = new Object();

        var message = 'Hello world!' 

        queueService.createQueueIfNotExists(queueName,function(err, result, response) {
            if (err) {
                context.log('here')
                context.error(err);
              return;
            }

            if (result.created) {
                context.log(`[Queue - Sender] Queue ${queueName} did not exist, created it`);
            }

            queueService.createMessage(queueName, message , (err, result, res) => {
                if (err) {
                    context.error(`[Queue - Sender] An error occurred: ${JSON.stringify(err)}`);
                }

                context.log(`[Queue - Sender] Sent: ${JSON.stringify(message)}`);
            });

          });

        send.ans = 'Hello world!'; 

        context.res = {
            body: send
        };

    }
    else {
        context.res = {
            status: 400,
            body: "Please pass a name on the query string or in the request body"
        };
    }
};

Я пишу лазурную функцию с помощью httpTrigger. При срабатывании следует сохранить имя в очереди «azurequeue», размещенное в эмуляторе хранилища Azure.

ошибка, которую я получаю Error

Storage

Что-то я делаю не так? как решить это. почему это происходит?

1 Ответ

0 голосов
/ 14 ноября 2018

Похоже, вы смешиваете HttpTrigger и QueueTrigger.

Если вы хотите использовать свою собственную логику выше для записи сообщения в очередь, убедитесь, что ваш function.json соответствует приведенному ниже.

{
  "disabled": false,
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    }
  ]
}

Если предпочтительнее использовать outputbinding , предоставляемый функцией Azure, давайте воспользуемся кодом ниже. Не нужно беспокоиться о том, что azurequeue не существует, внутренняя привязка использует createQueueIfNotExists.

module.exports = async function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');
    context.log('Request Headers = ' + JSON.stringify(req.headers));

    if ((req.query.parameter && req.query.func) || (req.body && req.body.parameter && req.body.func)) {

        var message = 'Hello world!' 
        var send = {'ans' : message};

        return {
            res: {
                body: send
            },
            queueOutput: message
        };
    }
    else {
        context.res = {
            status: 400,
            body: "Please pass a name on the query string or in the request body"
        };
        return;
    }
};

И не забудьте добавить выходные данные очереди в function.json.

{
  "disabled": false,
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    },
    {
      "type": "queue",
      "direction": "out",
      "name":"queueOutput" ,
      "queueName": "azurequeue",
      "connection":"AzureWebJobsStorage"
    }
  ]
}

Чтобы избежать других препятствий в будущем, взгляните на Руководство по функциям Azure в javascript .

...