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

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

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

HttpWebRequestとは.NETにおけるクラスであり、WebRequestクラスをHTTPに導入するものです。

Node.js

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

POST

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

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

971閲覧

JavascriptとNode.js間での非同期通信(POST通信)が出来ません。

YUTO_IT

総合スコア16

HttpWebRequest

HttpWebRequestとは.NETにおけるクラスであり、WebRequestクラスをHTTPに導入するものです。

Node.js

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

POST

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

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/05/04 09:51

編集2020/05/04 10:07

お世話になっております。プログラミング初心者のものです。

現在Node.jsを学習しており、
Javascript(クライアント)とNode.js(サーバ)間での非同期通信(POST通信)を行いたいのですが、
うまく接続できず困っております。

ご有識の方がいらっしゃったら、ご教示いただきたく存じます。

ここで行いたいことは、
「クライアント側で文字列を送信し、受け取ったサーバー側は「"hello"」を返す。」です。

ソースは以下のとおりです。(抜粋)

[HTML]
<input type="button" name="実行" value="実行" onClick='action();'/>

[Javascript]
function action(){
var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://localhost:8080');
xhr.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8');
var text = "こんにちは";
xhr.onreadystatechange = function() {
if(xhr.readyState === 4 && xhr.status === 200) {
alert( xhr.responseText + "を受け取りました。" );
}
}
xhr.send(text);
}
[Node.js]

var http = require('http');
var server = http.createServer();

server.on('request', function(req, res) {
res.writeHead(200, {'Content-Type' : 'text/plain'});
res.write('hello!');
res.end();
});
server.listen(8080);

実行手順
① node [node.jsソースコード名]でサーバー起動
② html側の「実行」ボタンを押下することで、上記javascriptが起動。

よろしくお願いいたします。

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

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

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

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

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

Yasumichi

2020/05/04 10:00

まず、 Function を function と小文字にした方が良いと思います。
YUTO_IT

2020/05/04 10:04

ご回答ありがとうございます。 失礼しました、転記時に誤りました。
Yasumichi

2020/05/04 10:11

あと、ソースの方を ```js JavaScript のソースを書く ``` とか、 ```html HTML のソースを書く ``` のようにすると質問が見やすくなります。 対応しているMarkdownの記法を知りたい https://teratail.com/help#about-markdown
Yasumichi

2020/05/04 10:14

とりあえず、Firefox の開発者ツールのネットワークのタブで見ると通信はできてて応答は返ってきてます。
AkitoshiManabe

2020/05/04 10:54

> ② html側の「実行」ボタンを押下する そのhtmlは、どのように表示したのでしょうか。
guest

回答1

0

ベストアンサー

とりあえず、Firefox の開発者ツールのネットワークのタブで見ると通信はできてて応答は返ってきてます。

イメージ説明

その後、開発者ツールでコンソールを除くと以下のようなエラーが出ていました。

クロスオリジン要求をブロックしました: 同一生成元ポリシーにより、http://localhost:8080/ にあるリモートリソースの読み込みは拒否されます (理由: CORS ヘッダー ‘Access-Control-Allow-Origin’ が足りない)。

サーバー側で Access-Control-Allow-Origin を出力するようにしてみたところ、動作しました。

javascript

1var http = require('http'); 2var server = http.createServer(); 3 4server.on('request', function(req, res) { 5 res.statusCode = 200 6 res.setHeader('Content-Type', 'text/plain'); 7 res.setHeader('Access-Control-Allow-Origin', '*'); 8 res.end('Hello!'); 9}); 10server.listen(8080); 11

なお、今回は、とりあえず動作させるために

Access-Control-Allow-Origin: *

としましたが、セキュリティを考慮するとドメインを指定した方が良いです。

投稿2020/05/04 10:14

編集2020/05/04 11:13
Yasumichi

総合スコア1773

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

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

YUTO_IT

2020/05/04 11:24

Yasumichi 様 ご回答いただき、ありがとうございます。 いただいた改善点を反映させたところ、無事に動作することが出来ました。 また、頂いた資料「対応しているMarkdownの記法を知りたい」ありがとうございました。 AkitoshiManabe 様 お力添えいただきありがとうございました。 またよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問