无法导入脚本Node.js服务器

我创build一个HTTP服务器节点,读取一个简单的HTML文件。 该html文件导入位于我的电脑中的一些脚本。 节点无法加载这个脚本。 为什么?

var http = require('http'); var io = require('socket.io').listen(2210); var fs = require('fs'); http.createServer(function(req, res){ fs.readFile("./index.html", function(err, data){ if (err){ res.writeHead(500); res.end("Error loading index.html"); } res.writeHead(200, {"Content-Type":"text/html"}); res.end(data, 'utf-8'); }); }).listen(2211); io.sockets.on('connection', function(socket){ }); 

这里是html文件:

 <!DOCTYPE html> <html> <head> <title>ASGEAWER</title> <meta name="viewport" content="width=device-width, minimum-scale=1, maximum-scale=1"> <link rel="stylesheet" href="jquery-mobile/jquery.mobile.css" /> <link rel="stylesheet" href="jquery.mobile.splitview.css" /> <link rel="stylesheet" href="jquery.mobile.grids.collapsible.css" /> <script type="text/javascript" src="jquery-1.7.1.js"></script> <script type="text/javascript" src="jquery.mobile.splitview.js"></script> <script type="text/javascript" src="jquery.mobile.js"></script> <script type="text/javascript" src="servernode.js"></script> <script type="text/javascript" src="interaction.js"></script> <script type="text/javascript"> $(document).on("ready",inici); </script> </head> <body> <div data-role="panel" data-id="menu" data-hash="crumbs" data-context="a#default"> <!-- Start of first page --> <div data-role="page" id="main" data-hash="false"> <div data-role="header" data-position="fixed"> <h1>Categoria</h1> </div><!-- /header --> <div data-role="content"> <ul data-role="listview"> </ul> </div> </div><!-- /page --> </div><!-- panel menu --> <div data-role="panel" data-id="main"> <!-- Start of 6th page --> <div data-role="page" id="aboutsv"> <div data-role="header" data-theme="b"> <h1>Productos</h1> </div><!-- /header --> <div data-role="content"> </div><!-- /content --> </div><!-- /page --> </div><!-- panel main --> </body> </html> 

铬给我那些错误:

 Uncaught SyntaxError: Unexpected token < jquery-1.7.1.js:1 Uncaught SyntaxError: Unexpected token < jquery.mobile.splitview.js:1 Uncaught SyntaxError: Unexpected token < jquery.mobile.js:1 Uncaught SyntaxError: Unexpected token < servernode.js:1 Uncaught SyntaxError: Unexpected token < interaction.js:1 Uncaught ReferenceError: $ is not defined 

该html文件导入位于我的电脑中的一些脚本

当浏览器发现一个带有src属性的<script>标签时,会做出另一个请求,请求服务器(在这种情况下是你的节点http服务器)请求该文件。

在你的情况下,你的服务器用index.html内容响应每个请求。

所以,为了导入这些文件,你必须修改你的http.createServercallback函数来响应每个带有该文件内容的静态文件请求,而不是总是用index.html内容来响应

它应该是这样的:

首先,创build一个处理内容types的函数

 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 http = require('http'), fs = require('fs'), path = require('path'); var HTTP_OK = 200, HTTP_ERR_UNKNOWN = 500, HTTP_ERR_NOT_FOUND = 404; http.createServer(function (req, res) { var filepath = '.' + (req.url == '/' ? index : req.url), fileext = path.extname(filepath); path.exists(filepath, function (f) { if (f) { fs.readFile(filepath, function (err, content) { if (err) { res.writeHead(HTTP_ERR_UNKNOWN); res.end(); } else { res.writeHead(HTTP_OK, contentType(fileext)); res.end(content); } }); } else { res.writeHead(HTTP_ERR_NOT_FOUND); res.end(); } }); }); 

这是一个简单的自制静态服务器, 但是如果你使用这个库的话更好一些

  • 简单的静态服务器: https //github.com/jesusabdullah/node-ecstatic
  • 完整的框架: http : //expressjs.com/