node.js index.html未定义javascript函数

时间:2016-08-12 18:01:24

标签: javascript node.js

我有' 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服务器?

由于

1 个答案:

答案 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 '); 
});