我有' index.html '引用我的javascript文件的页面,' bargraph1.js ',与 index.html 位于同一目录中。在html文件中,我在js页面中调用了一个函数:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>D3 Test</title>
<script type="text/javascript" src="d3.v4/d3.js"></script>
<script type="text/javascript" src="bargraph1.js"></script>
</head>
<body>
<h2>BarGraph</h2>
<script type="text/javascript">
barGraph(null, null, null, 30);
</script>
</body>
</html>
文件 bargraph1.js 包含一个功能&#39; barGraph()&#39;使用d3渲染条形图。
如果我用&#39;文件打开&#39;打开此文件在我的浏览器中,它在浏览器错误控制台中呈现精美且没有错误。
但是,如果我尝试从nodejs服务器提供页面,则条形图不会出现,控制台会显示&#39; barGraph未定义&#39;。但它之前的h2标题确实显示出来。 (实际上,我不认为它可以在服务器提供的任何引用的.js文件中找到任何内容)。这是服务器代码:
var app = require ('express')();
var http = require ('http').Server(app);
var io = require ('socket.io')(http);
var pagePath = __dirname + '/index.html';
console.log('sending page ' + pagePath + '\'');
app.get ('/', function(req, res) { res.sendFile(pagePath); });
io.on ('connection', function(socket) {
console.log ('\nsocket.id ' + socket.id + ' connected');
socket.on ('disconnect', function() {
console.log ('\nsocket.id ' + socket.id + ' disconnected');
});
});
//===================================================
// set HTTP server to listen on port 3001
//===================================================
http.listen (3001, function() {
console.log(' (3) http listening on *:3001 ');
});
所以 - 显然,在这两种不同的方式中,如何通过javascript来显示html页面,会有什么不同的东西得到解决(路径?)。我在浏览器中本地打开的文件中多次使用同样的bargraph1.js文件,所以我确信它中没有语法错误。
如何获取此文件及其中包含的函数以使用nodejs服务器?
由于
答案 0 :(得分:1)
您需要为<script>
标记内的网址创建路由。否则,当您的浏览器请求这些脚本文件时,它将从节点服务器获得404(当您只是双击HTML文件时不会发生这种情况,因为您的计算机会自动使用目录作为URL路径来提供这些文件)。由于您现在使用Express,请尝试运行
app.use(express.static(path.resolve(__dirname, '/')));
然后在最后而不是http.listen
,运行
app.listen(3001, process.env.IP || "0.0.0.0", function() {
console.log(' (3) http listening on *:3001 ');
});