2016-08-06 8 views
0

私は今のところ解決策を探していました...だから、基本的に私は2つのファイル:index.htmlとhellonode.jsを持っています。 Index.htmlには、テキストを持つdivと、クリックされたときにhellonode.jsに要求するボタンがあります。 hellonode.jsはリクエストを受け取り、レスポンスを送信することになっています。スクリプト全体を返すAjaxリクエスト

hellonode.js:ここ

var http= require('http'); 


function onRequest(request, response){ 
    console.log("request has been received"); 

response.writeHead(200, {"Context-Type": "text/plain"}); 
    response.write("<h1>response here!</h1>"); 
    response.end(); 


} 


http.createServer(onRequest).listen(8888); 

console.log("server is running"); 

は私のindex.htmlです:

<!DOCTYPE html> 
<html> 
<head> 
<script> 
    function loadXMLDoc() { 
     var xmlhttp; 

      xmlhttp = new XMLHttpRequest(); 


     xmlhttp.onreadystatechange = function() { 
      if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
       document.getElementById('myDiv').innerHTML=xmlhttp.responseText; 
      } 
     } 

     xmlhttp.open("GET", "hellonode.js", true); 
     xmlhttp.send(); 

    } 

</script> 
</head> 
<body> 
    <div id="myDiv"> 
     <h2>content</h2> 
    </div> 
    <button type="button" onclick="loadXMLDoc()">Your response content should appear here</button> 
</body> 
</html> 

イムノードJSとApacheサーバ(Apachelounge.com上のバイナリバージョン)を使用し、内側に置きますhtdocsフォルダにそれらの2つのファイルを作成してから私のサーバを起動してください。他のコンピュータから192.168.0.102にアクセスすると、index.htmlの画面が表示されます。ここまではすべてが大丈夫です。ボタンをクリックしてリクエストを送信すると、受け取ったレスポンスはhellonode.jsのjavascriptコード全体です。なぜそれが起こっているのですか?私はhellonode.jsが私の要求を受け取っていないという気持ちがあり、index.htmlはhellonodeのコンテンツを読んでいるだけで、実際にリクエストを送信していることを示しています。私はこのサーバー側のものに新しい。ありがとう。

+0

Apacheはサーバーであり、nodejsを使用するとサーバーを作成できます。これで、あなたが何らかのurlを要求しなければならないときにファイル 'hellonode.js'を要求しています。 :) https://expressjs.com/を読んでApacheを停止してください:) – Hardy

+0

'Context-Type' - あなたがmisspelt * Content * – Quentin

+0

あなたのhellonode.jsコードが.phpファイルのように動作することを期待しています...これはそうではありません。あなたのコンピュータにnodejsがインストールされているなら、 'node hellonode.js'でコードを起動し、あなたのブラウザが' 127.0.0.1:8080'になっているはずです...これは '

ここに!

' – CaffeineAddiction

答えて

1

Apache HTTPDはHTTPサーバーです。あなたが書いたJavaScriptもHTTPサーバーです。

JavaScriptプログラムを含むファイル用にApache HTTPを要求しています。

あなたが(例えば、サーバのコマンドラインから)のNode.jsを経由して、JavaScriptのプログラムを実行し、その後http://example.com:8888/

ノートへの要求をするためにはXMLHttpRequestを使用しなければならない、あなたはその後、this errorに実行されますので、あなたCORSヘッダーを応答に含めるようにJavaScriptプログラムを変更する必要があります。 (または、Apacheのmod_proxyを使用してApacheに要求し、それをJavaScriptサーバーに転送することもできます)。

+0

あなたのnodejsサーバからあなたのhtmlを提供してください – user3791775

+0

ありがとう、今はノードjsをサーバとして使っていて、hellonode.jsではなくポートでipを書きました:' xmlhttp.open( "GET" 、 "hellonode.js"、true); '、しかし今、私はCORSのものに問題があります。どこに私のコードにCORSヘッダーを置くべきですか、どのようにそれらが正確ですか? – user3658801

0

これは、GET要求を使用してhellonode.jsファイルを要求しているために発生しています。

リクエストを送信できるセットアップポイントとエンドポイントが必要です。例えば。

ノードサーバーをApacheサーバーではなくセットアップする必要があります。

0

あなたは正しいですか? hellonode.jsにXHRリクエストを送信することによって、ファイルの取得要求を送信してから、そのファイルのすべての内容を返すだけです。

ノードサーバーを実行しているようです。 serve a Node app with Apacheが必要な場合を除き、Apacheを介して実行するのではなく、Nodeアプリケーションを提供できるようにサーバーを設定する必要があります。

ローカルで実行するには、node hellonode.jsを実行する必要があります。これにより、Nodeを使用しているサーバーがスピンアップし、期待どおりのリソースを提供できるようになります。

(それでも、その場合には、しかし、ファイルへのXHRリクエストを送信すると、それを実行せずにファイル全体を返すために起こっている)

0

NodejsはApacheで実行されるものではありません。 Apacheはhtmlページを提供することを目的としているため、HTMLページを正しく表示します(PHPスクリプトからはapart)。ただし、ノードスクリプトを提供することは意図されていません。したがって、要求はブラウザのWebページから.cssまたは.jsファイルアセットを要求するときと同じように、ノードスクリプトをプレーンテキストとして返すだけです。

あなたが明示的にノードのコマンドでそれを呼び出すノードスクリプトを設定する必要があります。 ノードhellonode.js

またはLinuxで: nodejs hellonode.js

を次に、あなたの要求と、サーバー側場合スクリプトが適切にコーディングされている場合、nodejsは実際に要求をリスンして適切な応答を送信します。

しかし、ノードを持つページを提供するのはApacheよりも簡単ではなく、nodemonpm2などのサービスで自分自身を教えることは必ずお支払いいただきます。

node hellonode.js 

Nodejsサーバはときに、ブラウザの結果を表示するために使用された現在のディレクトリとhellonode.jsファイル上で実行されている:あなたは、端末に入力したら、例として

+0

"NodejsはApacheで実行するためのものではありません"。これは完全に真実ではありません。静的ファイルの提供にはApacheを使用し、node.jsのプロキシとして使用できます。 – undefined

0

xmlhttp.open("GET", "hellonode.js", true);xmlhttp.open("GET", "http://www.thomas-bayer.com/sqlrest/", true);

0

をすることができto:localhost:8888つまり、hellonode.jsファイルは、古典的なPHPアプリケーションでindex.phpの役割を果たしています。

あなたが望むものを実現するには、組み込みのhttpモジュールを使用するか、などのフレームワークを使用できます。

関連する問題