Azure Functions (Node.JS) で fetch が使えない?
Rest API に GET|POST したいので、fetch を使おうとしたら動かない? ということで調べたら、Node.JS(v16) では module として利用できないので NG と...。
公式ドキュメント: Azure Functions の JavaScript 開発者向けガイド を見てみる
公式ドキュメントである Azure Functions の JavaScript 開発者向けガイド には、JavaScript Function に関する考慮事項 として async と await を使用する と記載されています(参照)。
推奨方法として、util.promisify を使う方法が掲載されています。
request と util を使って書く 【結論】
ドキュメントのサンプルに則り、util モジュールを使って非同期に (かつ try&catch で例外処理を組み込んで) 書いてみます。request と util を使って動いた!という情報を踏襲して、書いてみた&動いたものがこちら。
index.js
const util = require ('util');
const request = require ('request');
const requestPromise = util.promisify(request);
//http trigger function
module.exports = async function (context) {
try
{
var response = await requestPromise(
{
method: 'POST',
url: 'https://example.com/postapi', //目的のURLに変更
headers: {
'Content-Type': 'application/json'
//必要なヘッダーを適時追加
},
body: JSON.stringify({ "id":"xxxxx", "name":"annie" }) //お好みのフォーマットで
}
);
context.res = {
status: 200,
body: response.body
};
}
catch
{
//例外処理を記載。例えば:
context.res = {
status: 400,
body: 'Http POST request error!'
};
}
実際の利用例
今回試した環境
- OS: Windows 11
- Node.js: 16.13.2
- Visual Studio Code 1.70.2
- Azure Functions for Visual Studio Code 1.7.4
- Azure Function 4.x