Функция Azure (ручной запуск): отправка пост-запроса - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь отправить пост-запрос в javascript с помощью функции Azure (ручной триггер), но получаю следующую ошибку:

mscorlib: One or more errors occurred. Error: Cannot find module 'xmlhttprequest'
    at Function.Module._resolveFilename (module.js:469:15)
    at Function.Module._load (module.js:417:25)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)

Вот моя функция:

var XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;
var xhr = new XMLHttpRequest();

module.exports = function (context, input) {
    context.log('The Request body is:', input);
    context.done();

    var url = "<myurl>";


    xhr.open("POST", url, false);

    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

    xhr.send(input);
};

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Другой вариант - использовать HTTP модуль NodeJS - https://nodejs.org/api/http.html

. В этом сценарии вы начинаете с:

var http = require('http');

, а затем отправляете данные с:

var req = http.request(options, function(response) {
      var str = "";
      response.on("data", function (chunk) {
        str += chunk;
      });

      response.on("end", function () {
        res.json(str);           
      });          
    });
0 голосов
/ 18 мая 2018

Сначала необходимо установить xmlhttprequest модуль.

Если вы запускаете его на портале, перейдите к https://{yourfunctionappname}.scm.azurewebsites.net/DebugConsole

В консоли cmd введите cd ./site/wwwroot, затем npm install xmlhttprequest.

Если вы разрабатываете локально, просто откройте cmd в папке проекта вашей функции и npm install xmlhttprequest.

Для этой ошибки

mscorlib: Ошибка: EPERM: операция не разрешена, откройте «D: \ Windows \ system32 \ .node-xmlhttprequest-sync-7048» в «Ошибка (собственная)» в Object.fs.openSync (fs.js: 641: 18) в Object.fs.writeFileSync (fs.js: 1347: 33) при отправке (D: \ home \ site \ wwwroot \ node_modules \ xmlhttprequest \ lib \ XMLHttpRequest.js: 477: 10)

Вы установили openметод асинхронного режима false, что означает, что этот метод выполняется синхронно.

Будет создан файл в текущем рабочем каталоге (cwd).В функции Azure по умолчанию это D:\Windows\system32, где у нас нет доступа к созданию файла из-за Ограничения песочницы .

Если версия времени выполнения вашей функции - бета, мы можем изменить cwdфункционировать папку с помощью process.chdir("d:\\home\\site\\wwwroot\\functionname").И все должно работать.

Если время выполнения равно ~ 1, после изменения cwd произойдет новая ошибка - файл блокировки синхронизации .node-xmlhttprequest-sync-xxxx не может быть удален должным образом.Поэтому после одного выполнения функция будет заблокирована в следующий раз и не сможет ответить.

Альтернативой является использование асинхронного режима или попытка использовать модуль, отличный от xmlhttprequest.

...