localhost和Javascript

时间:2012-12-19 19:39:15

标签: javascript node.js socket.io localhost

我的代码工作正常,但我希望通过将整个Javascript放在另一个文件maps.js中来清理代码。但是maps.js的行无法识别。使用Firebug,我尝试调试并发现此文件的GET失败!

然而,GET适用于socket.io.js。我正在使用node.js通过localhost:8080运行系统。谁能告诉我这里做错了什么?或者HTML代码执行时实际工作目录在哪里?我甚至尝试过maps.js的绝对路径,但没有取得任何成功。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta type="keywords" content="" />
    <link href="/maps/documentation/javascript/examples/default.css" rel="stylesheet">
    <title>ReSense Client</title>
    <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
    <script type="text/javascript" src="/socket.io/socket.io.js"></script>
    <script type="text/javascript" src="/js/maps.js"></script>
    <script type="text/javascript">
      var socket = io.connect('http://localhost');
      var stockholm = new google.maps.LatLng(59.32522, 18.07002);
      var parliament = new google.maps.LatLng(59.327383, 18.06747);
      var marker;
      var map;
      function initialize() {
        var mapOptions = {
          zoom: 13,
          mapTypeId: google.maps.MapTypeId.ROADMAP,
          center: stockholm
        };
        map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);
        google.maps.event.addListener(marker, 'click', toggleBounce);
      }
      function toggleBounce() {
        if (marker.getAnimation() != null) {
          marker.setAnimation(null);
        } else {
          marker.setAnimation(google.maps.Animation.BOUNCE);
        }
      }
    </script>
  </head>
  <body onload="initialize()">
    <div id="map_canvas" style="width: 500px; height: 400px;">map div</div>
  </body>
</html>

2 个答案:

答案 0 :(得分:1)

我没有看到一些node.js路由,我最好的猜测是你在使用Node.js提供静态文件的方式存在问题。确保您的JS位于您作为静态目录的目录中。如果你使用快递,就像这样:

app.configure(function(){
    app.use(express.static("path/to/public"));
});

并确保“public”目录无论您在哪里提供静态文件。

答案 1 :(得分:0)

问题是您可能在服务器端使用默认示例。 与PHP + Apache解决方案相比,node.js在其中是一种“apache”,默认情况下,当你直接使用它时,它不会像Apache那样服务器文件。

必须在node.js中手动编码。

您可以写下可以访问此类文件的路径。这是一篇很好的文章,看看如何提供静态文件。 http://www.sitepoint.com/serving-static-files-with-node-js/

还有另一种选择,就是使用Express.js框架,这有助于路由,并且正如Dan Crews在下面写的那样使用额外的配置来强制node.js如果没有路由被处理,则静态地提供文件显影剂。

app.configure(function(){
  app.use(express.static("path/to/public"));
});

请记住,node.js不会执行您期望从其他Web平台(如nginx或apache)执行的操作。所以你必须自己照顾他们。