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

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

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

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

Node.js

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

JavaScript

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

Q&A

解決済

1回答

1217閲覧

Javascriptで複数箇所へPOSTリクエストする

moroheia

総合スコア14

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

Node.js

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

JavaScript

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

0グッド

1クリップ

投稿2018/08/31 05:47

編集2018/09/03 03:00

こんにちは。
現在私は、下記のような仕組みを作成しようとしております。

①[サイトA] から [サイトB](Firebase) へGETリクエストを行う。
②[サイトB] では、 [サイトA] から受け取った内容を処理してJSONデータを作る
③②の内容を [サイトB] から [サイトX] と [サイトY] のそれぞれへPOSTリクエストを送る。

しかし、現在③の内容で[サイトX]にしか送信できておりません。
これを、同時に二箇所へ送信するようにしたいです。

また、この時[サイトX] へはHTTP通信、 [サイトY] へはHTTPS通信で同じ内容をPOSTで送りたいです。
それは可能でしょうか。

ご確認宜しくお願いします。

以下が[サイトB](Firebase)の内容です。

const functions = require('firebase-functions'); const admin = require('firebase-admin'); const http = require('http'); admin.initializeApp(); const request = require('request'); const querystring = require('querystring') const stringify = querystring.stringify; var message = "none"; exports.hello = functions.https.onRequest((request, response) => { if (request.query.email !== undefined) { var param = { email:request.query.email, value:request.query.value, data:request.query.data } //------データの処理箇所は割愛します------// if(user == 0) { var message = "mail"; } else { var message = "yes"; var host = (snapshot.val() && snapshot.child( user + "/host").val()) || 'Anonymous'; var options = { host: host, port: ****, method: 'POST', contentType: 'text/plain', headers: { email: request.query.email, value:request.query.value, data:request.query.data } }; } //---POST---// response.status(200).send(message); const req = http.request(options, (res) => { }) req.on('error', (e) => { console.log('problem with request: ' + e.message); response.status(404).send(message); }); req.end(); }) .catch(error => { response.status(404).send(message) }) } else { response.status(400).send(message); } });
const functions = require('firebase-functions'); const admin = require('firebase-admin'); const http = require('http'); admin.initializeApp(); const request = require('request'); const querystring = require('querystring') const stringify = querystring.stringify; var message = "none"; exports.hello = functions.https.onRequest((request, response) => { if (request.query.email !== undefined) { var param = { email:request.query.email, value:request.query.value, data:request.query.data } //------データの処理箇所は割愛します------// if(user == 0) { var message = "mail"; } else { var message = "yes"; var host = (snapshot.val() && snapshot.child( user + "/host").val()) || 'Anonymous'; var options = { host: host, port: ****, method: 'POST', contentType: 'text/plain', headers: { email: request.query.email, value:request.query.value, data:request.query.data } }; } //---POST---// response.status(200).send(message); const req = http.request(options, (res) => { }) req.on('error', (e) => { console.log('problem with request: ' + e.message); response.status(404).send(message); }); req.end(); }) .catch(error => { response.status(404).send(message) }) } else { response.status(400).send(message); } });

以下が二箇所に送信しようとした[サイトB](Firebase)の内容です。

const functions = require('firebase-functions'); const admin = require('firebase-admin'); const http = require('http'); admin.initializeApp(); const request = require('request'); const querystring = require('querystring') const stringify = querystring.stringify; var message = "none"; exports.hello = functions.https.onRequest((request, response) => { if (request.query.email !== undefined) { var param = { email:request.query.email, value:request.query.value, data:request.query.data } //------データの処理箇所は割愛します------// if(user == 0) { var message = "mail"; } else { var message = "yes"; var host = (snapshot.val() && snapshot.child( user + "/host").val()) || 'Anonymous'; var options = { host: host, port: ****, method: 'POST', contentType: 'text/plain', headers: { email: request.query.email, value:request.query.value, data:request.query.data } }; var options_2 = { host: sample.com/, port: ****, method: 'POST', contentType: 'text/plain', headers: { email: request.query.email, value:request.query.value, data:request.query.data } }; } //---POST1---// response.status(200).send(message); const req = http.request(options, (res) => { }) req.on('error', (e) => { console.log('problem with request: ' + e.message); response.status(404).send(message); });    //---POST2---// response.status(200).send(message); const req = http.request(options_2, (res) => { }) req.on('error', (e) => { console.log('problem with request: ' + e.message); response.status(404).send(message); }); req.end(); }) .catch(error => { response.status(404).send(message) }) } else { response.status(400).send(message); } });

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/08/31 06:30

今どのような問題が起きているのでしょうか?
moroheia

2018/09/03 02:21

ご説明が不足しており、申し訳ございません。問題となっているのは、③の内容で一箇所にしか送信できていないことです。 これを、同時に二箇所へ送信するようにしたいと考えております。
退会済みユーザー

退会済みユーザー

2018/09/03 02:26

素直に2つの宛先へリクエストすればいいのでは、と思うのですが、なぜ一箇所にしか送信できないのでしょうか?
moroheia

2018/09/03 03:01

一個めのPOSTリクエスト後に処理を終了してしまっているようです。二箇所に送ろうとした時のコードも追加しましたので、よろしければご確認お願いします。
guest

回答1

0

ベストアンサー

http.requestはそのままですと、(ちょっと語弊があるが)returnを待ちません。
そのためPromiseを使った同期処理が必要になります

JavaScriptの同期、非同期、コールバック、プロミス辺りを整理してみる
Promiseについて0から勉強してみた

またLibraryのasync使う方法もあります。
Node.jsでasyncモジュールを使って同期処理を行う

投稿2018/09/03 03:18

namda

総合スコア705

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

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

moroheia

2018/09/05 04:23

アドバイス頂き、ありがとうございます。 頂いた内容を拝見し、今試行錯誤しているところです。 さて、「二箇所に送信しようとした[サイトB](Firebase)の内容」ですが、POST1についてはreturnを待って[サイトA]へ返したいのですが、POST2についてはGETリクエストを行なった後は特に何も待たずに終了したいです。(送りっぱなしを希望) 何卒よろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問