2013-07-18 2 views
9

私はnode.jsとjavascriptの初心者です。node.jsのクライアント側にjavascriptを含めるには?

外部のjavascriptファイルをhtmlコードに含めたいと思います。ここではhtmlコード、 "index.htmlを" です:

<script src="simple.js"></script> 

はまた、ここではjavascriptのコードは "simple.js"、次のとおりです。

document.write('Hello'); 

私が直接 "index.htmlを" を開くと、ウェブブラウザ(例えば、Google Chrome)上で動作します。 (「Hello」メッセージが画面に表示されるはずです)

ただし、node.js httpサーバー経由で「index.html」を開くと、動作しません。 は、ここでのNode.jsファイル、 "app.js" です:

var app = require('http').createServer(handler) 
    , fs = require('fs') 

app.listen(8000); 

function handler (req, res) { 
    fs.readFile(__dirname + '/index.html', 
    function (err, data) { 
    if (err) { 
     res.writeHead(500); 
     return res.end('Error loading index.html'); 
    } 

    res.writeHead(200); 
    res.end(data); 
    }); 
} 

( "index.htmlを"、 "simple.js" とは、 "app.js" と同じディレクトリにあります。)私が始めた httpサーバー。 ( "bash $ node app.js"による) その後、私は "localhost:8000"に接続しようとしました。 「Hello」メッセージは表示されません。

"index.html"はhttpサーバーに "simple.js"を含めることができなかったと思います。

どうすればよいですか?

答えて

7

問題はブラウザが要求するもので、あなたは "index.html"を返します。ブラウザはあなたのページを読み込み、HTMLを取得します。そのHTMLにはスクリプトタグが含まれており、ブラウザはノードにスクリプトファイルを要求します。しかし、ハンドラはリクエストの内容を無視するように設定されているので、htmlをもう一度返すだけです。

+0

私はあなたのアドバイスによって方向を得ました。私は 'ハンドラ'について学ぶ必要があります。ありがとう! – lancif

+0

クイックヒント。合理的なブラウザを使用している場合は、要求されたデータと応答されたデータをかなり簡単に見ることができます。ブラウザで 'F12'をクリックし、" network "または" request "(またはそれに類似したブラウザに依存します)という名前のものを探してください。 – Alxandr

1

ハンドラは常に/index.htmlの内容を返すようにハードコードされています。あなたは要求されているリソースに注意を払い、正しいものを返す必要があります。 (ブラウザでsimple.jsを入力した場合はindex.htmlの代わりにsimple.jsとする必要があります)。

3

実用的なコードです。 シンプルなコードをもっとクリーンにする必要がありますが、これは最小に非常に近いです。

このコードでは、index.htmlなどのファイルが/ clientディレクトリにあるとします。

幸運。

var fs = require('fs'); 
var url = require("url"); 
var path = require('path'); 
var mime = require('mime'); 

var log = console.log; 

var handler = function (req, res) 
{ 
    var dir = "/client"; 
    var uri = url.parse(req.url).pathname; 
    if (uri == "/") 
    { 
     uri = "index.html"; 
    } 
    var filename = path.join(dir, uri); 
    log(filename); 
    log(mime.lookup(filename)); 
    fs.readFile(__dirname + filename, 
     function (err, data) 
     { 
      if (err) 
      { 
       res.writeHead(500); 
       return res.end('Error loading index.html'); 
      } 
      log(data); 
      log(filename + " has read"); 
      res.setHeader('content-type', mime.lookup(filename)); 
      res.writeHead(200); 
      res.end(data); 
     }); 
} 
15

Alxandrが正しい。私は彼の答えをもっと明確にしようとします。

あなたの要求に「ルーター」を書く必要が生じることがあります。以下は、それを働かせる簡単な方法です。 www.nodebeginner.orgをお探しの場合は、適切なルータを構築する方法があります。

var fs = require("fs"); 
var http = require("http"); 
var url = require("url"); 

http.createServer(function (request, response) { 

    var pathname = url.parse(request.url).pathname; 
    console.log("Request for " + pathname + " received."); 

    response.writeHead(200); 

    if(pathname == "/") { 
     html = fs.readFileSync("index.html", "utf8"); 
     response.write(html); 
    } else if (pathname == "/script.js") { 
     script = fs.readFileSync("script.js", "utf8"); 
     response.write(script); 
    } 


    response.end(); 
}).listen(8888); 

console.log("Listening to server on 8888..."); 
+0

Timbó、_simple_と_worked_スニペットの両方に感謝します! –

0
function contentType(ext) { 
    var ct; 

    switch (ext) { 
    case '.html': 
     ct = 'text/html'; 
     break; 
    case '.css': 
     ct = 'text/css'; 
     break; 
    case '.js': 
     ct = 'text/javascript'; 
     break; 
    default: 
     ct = 'text/plain'; 
     break; 
    } 

    return {'Content-Type': ct}; 
} 



    var PATH = 'C:/Users/DELL P26E/node_modules' 
    var http = require("http"); 
    var fs = require('fs'); 
    var url = require("url"); 
    var path = require("path") 
    var fileName = "D:/index.html"; 

    var server = http.createServer (function (request, response) { 




     var dir = "D:/"; 
     var uri = url.parse(request.url).pathname; 
     if (uri == "/") 
     { 
      uri = "index.html"; 
     } 
     var filename = path.join(dir, uri); 



     fs.readFile(filename, 
      function (err, data) 
      { 
       console.log(err) 
       if (err) 
       { 
        response.writeHead(500); 
        return response.end('Error loading index.html'); 
       } 

       var ext = path.extname(filename) 
       response.setHeader('content-type',contentType(ext)); 
       response.writeHead(200); 
       response.end(data); 
      }); 


    }).listen(3000); 

    console.log('Server running on 8124') ; 
関連する問題