簡體   English   中英

如何在用作nodejs服務器響應的html文件中包含外部腳本

[英]how to include external script in html file that is used as response in nodejs server

標題可能很混亂,所以我用我的代碼解釋一下這是我的Nodejs服務器(“server.js”)代碼:

var http = require('http');
var fs = require('fs');

var fserver = function (req, res) {
  fs.readFile('hieu.html', function(err, data) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write(data);
    res.end();
  });
};
http.createServer(fserver).listen(8080);

這是我的 hieu.html 文件:

<html>
    <body>
        <script src="check.js">
        </script>
        <p> a line </p>
        <script>
                var table = document.createElement("table");
                for (var i = 0; i < 10; i++) {
                    var tr = document.createElement('tr');
                    for (var j = 0; j < 10; j++) {
                        var td = document.createElement("BUTTON");
                    if(i%2 == j%2) td.appendChild(document.createTextNode("B"));
                    else td.appendChild(document.createTextNode("W"));
                        tr.appendChild(td);
                    }
                    table.appendChild(tr);
                }
            document.body.appendChild(table);
        </script>
        <p> hieudzvkl </p>
    </body>
</html>

我的 check.js 文件只是一行將數字 5 寫入文檔的代碼。

如果我只是運行 hieu.html 文件,我會得到:

在此處輸入圖片說明

然而,如果我運行 ("server.js") 代碼,我會得到:

在此處輸入圖片說明

如您所見,腳本src ="check.js"沒有出現在 res 中。

我不明白為什么會發生這種情況。 有什么辦法可以解決這個問題嗎? 提前致謝!

當您從 nodeJS 檢索 html 文件時,瀏覽器將指向網絡服務器上的一個位置(在這種情況下,它顯示在端口 8080 上)。 html 文件引用的任何其他資源也將從該位置獲取,除非它們是絕對 URL。 所以這里發生的事情是你的瀏覽器試圖從與 html 文件相同的位置獲取check.js ,換句話說,從網絡服務器。 您必須更新您的 nodeJS 代碼,以便它了解如何同時提供hieu.html文件和check.js文件。

考慮向server.js代碼添加類似於以下內容的邏輯:

var http = require('http');
var fs = require('fs');

var fserver = function (req, res) {
  if (req.url === '/check.js') {
    // Insert Code here, such as...
    fs.readFile('check.js', function(err, data) {
      res.writeHead(200, {'Content-Type': 'text/javascript'});
      res.write(data);
      res.end();
    });
  } else {
    fs.readFile('hieu.html', function(err, data) {
      res.writeHead(200, {'Content-Type': 'text/html'});
      res.write(data);
      res.end();
    });
  }
};
http.createServer(fserver).listen(8080);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM