无法导入脚本 Node.js 服务器
Posted
技术标签:
【中文标题】无法导入脚本 Node.js 服务器【英文标题】:Cannot import scripts Node.js server 【发布时间】:2012-12-10 07:50:42 【问题描述】:我正在创建一个带有节点的 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>
chrome 给了我这些错误:
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
【问题讨论】:
【参考方案1】:这个 html 文件导入了一些位于我电脑中的脚本
当浏览器找到带有 src 属性的<script>
标签时,它会向请求该文件的服务器(在本例中为您的节点 http 服务器)发出另一个请求。
在您的情况下,您的服务器使用 index.html 内容响应每个请求。
因此,为了导入该文件,您必须更改 http.createServer 回调,以使用该文件的内容响应每个静态文件请求,而不是始终使用 index.html 内容响应
应该是这样的:
首先,创建一个处理内容类型的函数
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/【讨论】:
以上是关于无法导入脚本 Node.js 服务器的主要内容,如果未能解决你的问题,请参考以下文章
Node.JS JavaScript socket.io 在微服务架构中发出消息
node.js 服务器是不是应该与 mysql 实例建立单一连接?
检测 NODE.JS 脚本是通过 bash(unix)/cmd(windows)直接调用还是导入(ESM 模块加载器)[重复]