質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

Q&A

解決済

1回答

718閲覧

sync-requestをrequireするとエラーが発生した

wangzj

総合スコア53

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

0グッド

0クリップ

投稿2018/09/19 04:09

編集2018/09/19 04:30

前提・実現したいこと

sync-requestで同期を実現したい
環境:Azure→Blob Trigger→funtions→nodejs

発生している問題・エラーメッセージ

最初、
var request = require('request');
で、機能を試してみました。
requestは非同期なので、同期にさせたいため、
var request = require('sync-request');
に変えて、実装しようと思いますが、
エラーが発生しました。

2018-09-19T03:55:33.453 [Error] Exception while executing function: Functions.BlobTriggerJS2. mscorlib: One or more errors occurred. Error: find port exited with code 4294967295 at findPort (D:\home\site\wwwroot\BlobTriggerJS2\node_modules\sync-rpc\lib\index.js:58:11) at start (D:\home\site\wwwroot\BlobTriggerJS2\node_modules\sync-rpc\lib\index.js:32:16) at sendMessage (D:\home\site\wwwroot\BlobTriggerJS2\node_modules\sync-rpc\lib\index.js:117:17) at createClient (D:\home\site\wwwroot\BlobTriggerJS2\node_modules\sync-rpc\lib\index.js:157:27) at Object.<anonymous> (D:\home\site\wwwroot\BlobTriggerJS2\node_modules\sync-request\lib\index.js:16:14) at Module._compile (module.js:570:32) at Object.Module._extensions..js (module.js:579:10) at Module.load (module.js:487:32) at tryModuleLoad (module.js:446:12) at Function.Module._load (module.js:438:3). 2018-09-19T03:55:33.468 [Error] Function completed (Failure, Id=8a*************, Duration=230ms)

該当のソースコード

javascript

1var request = require('sync-request');

試したこと

requestに関するものをすべて削除して、「var request = require('sync-request');」だけ残ってもエラーが変わらない

npm uninstall --save-dev request npm install --save-dev sync-request npm init

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyabi-sun

2018/09/19 04:26

エラー文最後の行のID=xxxはサービスに関わるアクセスキーのように見えますが大丈夫ですか?もしまずいようなら修正しても履歴として残ってしまうので、修正後Teratail運営に連絡して消してもらってください。
wangzj

2018/09/19 04:31

ご提示ありがとうございます。修正しました。後ほど、Teratail運営に連絡します。
guest

回答1

0

ベストアンサー

2017-02-21 Node.jsのHTTP通信はsync-request非推奨でthen-requestを推奨

1年半も前に既にsync-requestは非推奨扱いになっています。
おそらくこのモジュールが古過ぎで動かないのではないでしょうか?

requestは非同期なので、同期にさせたいため、

これはどうしてでしょうか?
AzureのBlob Triggerの事はあいにくわかりませんので、公式のドキュメントを閲覧したところ、非同期用の関数の用意方法が載っていました。
Azure Functions の JavaScript 開発者向けガイド

関数が非同期関数でない場合は、関数が完了したことをランタイムに通知するためにcontext.done を呼び出す必要があります。 これがない場合、実行はタイムアウトします。

非同期の場合は関数の第一引数のcontext.doneを実行すれば良いとのことで、
特に問題にはならないと思います。

もし、非同期の書き方が気に食わないという話であれば、
Promise→async/awaitの順に学習してみてはどうでしょう?
Promise単体ではかなり使いづらいですが、asyncやawait構文とセットで使えば
非同期ではあるものの、ほぼ同期的に見えるコードで記述していくことが可能です。

リファレンスを見た感じは下記のようなコードで行けるでしょう。
request-promiseを利用する想定のサンプルを作ってみました。

JavaScript

1const rp = require('request-promise'); 2 3module.exports = async (context) => { 4 const html = await rp('http://www.google.com'); 5 context.done(html); 6}

なお、このasync/await構文はNode.jsの8系以上対応です。
バージョン1ではNode.jsの6系とのことで動作しないと想定されますが、
バージョン2ではNode.jsの8系や10系とのことで動作するでしょう。

投稿2018/09/19 06:30

miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wangzj

2018/09/19 06:54 編集

素晴らしい! ご回答ありがとうございます。 >Node.jsのHTTP通信はsync-request非推奨でthen-requestを推奨 Google検索時に、これも確認しました。then-requestも非同期ですね。 >もし、非同期の書き方が気に食わないという話であれば、 おっしゃった通りです、気にならないので、requestを同期させる方法を探しています。 >Promise→async/awaitの順に学習してみてはどうでしょう? Promiseを使ってみたが、Promiseの各Functionにrequestを使うと、非同期になります。 awaitを使おうとすると、エラーになってました。原因追求せず、sync-requestを使う方向でやっていました。 先ほど、nodeバージョン確認しました。「6.5.0」です。 バージョン古いですね。awaitエラーの原因はこれですね! awaitを使う方向で頑張っていきます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問