localhost和Javascript

localhost和Javascript,javascript,node.js,socket.io,localhost,Javascript,Node.js,Socket.io,Localhost,我的代码运行良好,但我想通过将整个Javascript放入另一个文件(如maps.js)来清理代码。但是不能识别带有maps.js的行。使用Firebug,我试着调试,发现这个文件的GET失败了 然而,GET适用于socket.io.js。我正在通过localhost:8080使用node.js运行系统。有人能告诉我我做错了什么吗?或者在执行HTML代码时,当前工作目录实际上在哪里?我甚至尝试了maps.js的绝对路径,但没有成功 <!DOCTYPE html> <html x

我的代码运行良好,但我想通过将整个Javascript放入另一个文件(如
maps.js
)来清理代码。但是不能识别带有
maps.js
的行。使用Firebug,我试着调试,发现这个文件的GET失败了

然而,GET适用于
socket.io.js
。我正在通过localhost:8080使用node.js运行系统。有人能告诉我我做错了什么吗?或者在执行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>

重新登录客户端
var socket=io.connect('http://localhost');
var stockholm=新google.maps.LatLng(59.32522,18.07002);
var parliament=new google.maps.LatLng(59.327383,18.06747);
var标记;
var映射;
函数初始化(){
变量映射选项={
缩放:13,
mapTypeId:google.maps.mapTypeId.ROADMAP,
中心:斯德哥尔摩
};
map=new google.maps.map(document.getElementById('map_canvas'),mapOptions);
google.maps.event.addListener(标记'click',toggleBounce);
}
函数toggleBounce(){
if(marker.getAnimation()!=null){
marker.setAnimation(null);
}否则{
setAnimation(google.maps.Animation.BOUNCE);
}
}
地图组

在没有看到node.js路由的情况下,我的最佳猜测是,使用node.js服务静态文件的方式存在问题。确保JS位于作为静态目录使用的目录中。如果您使用的是express,则如下所示:

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

只需确保“public”目录位于您提供静态文件的任何位置。

问题在于您可能会在服务器端使用默认示例。 与PHP+Apache解决方案相比,node.js本身就是一种“Apache”,默认情况下,它不会像Apache那样为文件提供直接url

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

您可以写下有权访问该文件的路由。这篇文章很好地介绍了如何为静态文件提供服务

还有另一个选择,就是使用Express.js框架,这有助于路由,正如Dan Crews在下面所写的,使用额外的配置将强制node.js,以便在开发人员没有处理路由的情况下静态地提供文件

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

请记住,node.js不会做您期望从其他web平台(如nginx或apache)获得的事情。所以你必须自己处理它们。

你能告诉我们你的文件结构吗?“/js/maps.js”将要查看,您的文件就在那里吗?我觉得很奇怪。我会重新键入该行(从头开始),以确保其中没有奇怪的非打印/显示字符。-我假设socket.io和js是同一级别的文件夹no,socket.io位于位置c:\Program Files(x86)\nodejs\node\u modules\中,maps.js位于位置f:\workspace\ReSense\js\中。静态HTML文件与node.js不在同一文件夹中,而是在某个外部文件夹中。然而,这是可行的。这意味着,当我尝试访问localhost:8080时,我可以看到我的应用程序,而不会出现任何问题。我的问题是,我想将java脚本从html文件分离到一个maps.js文件,但这是不起作用的。看起来你并不是单独提供html,因为在html中,你从同一个域获得socket.io,如果它给你,那么同一个域应该由node.js处理。而且,只要您不通过node.js提供静态文件,就无法访问任何文件。您必须编写服务文件的逻辑。或者请发布服务器端node.js代码。