如何使用nodeJS将脚本文件链接到html文件

时间:2014-09-29 19:09:31

标签: javascript html node.js

我正在使用nodeJS提供一些html,但我希望能够调用javascript文件中的函数,我试图将其链接起来。但是,我收到错误消息Resource interpreted as Script but transferred with MIME type text/html: "http://localhost:8888/index.js"。我不确定哪些内容无法正常链接,需要一种方法来链接我的文件index.js。我试图做的是将文件加载到头部,如下所示:

http = require('http'),

http.createServer(function(req, res) {

var body = '<html>'+
    '<head>'+
    '<script src="index.js"></script>'+
    '<meta http-equiv="Content-Type" content="text/html; '+
    'charset=UTF-8" />'+
    '</head>'+
    '<body>'+
    '</body>'+
    '</html>';
response.writeHead(200,{"Content-Type":"text/html"});
response.write(body);
response.end();
}

}).listen(8888);

如何加载此javascript文件index.js,以便index.js中包含的所有功能都可在客户端使用?

2 个答案:

答案 0 :(得分:2)

创建一个新的index.html页面,而不是对其进行硬编码 - 在其中包含脚本文件并提供index.html

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

    http.createServer(function(req, res) {        
      if(req.url == '/index.html') {
        var file = __dirname + '/index.html';  //this index.html contains script tag
        var stat = fs.statSync(file);
        res.writeHead(200, {
          'Content-Type': 'text/javascript',
          'Content-Length': stat.size
        }); 
        var readStream = fs.createReadStream(file);
        readStream.pipe(res);
      // Send default page
      }
    }).listen(8888);

答案 1 :(得分:1)

index.js的请求与/的响应相同。

只处理这种情况的简单解决方案是:

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

http.createServer(function(req, res) {
  // Send index.js
  if(req.url == '/index.js') {
    var file = __dirname + '/index.js';
    var stat = fs.statSync(file);
    res.writeHead(200, {
      'Content-Type': 'text/javascript',
      'Content-Length': stat.size
    }); 
    var readStream = fs.createReadStream(file);
    readStream.pipe(res);
  // Send default page
  } else {
    var body = '<html>'+
        '<head>'+
        '<script src="index.js"></script>'+
        '<meta http-equiv="Content-Type" content="text/html; '+
        'charset=UTF-8" />'+
        '</head>'+
        '<body>'+
        '</body>'+
        '</html>';
    res.writeHead(200,{"Content-Type":"text/html"});
    res.write(body);
    res.end();
  }
}).listen(8888);