如何调试失败的xmlhttprequest

时间:2015-04-12 00:31:08

标签: javascript node.js xmlhttprequest

我正在尝试从服务器上的数据库中检索数据以使用客户端。如果没有实际抛出任何错误就会失败,我无法弄清楚如何调试它。

我的服务器使用MongoDB数据库用node.js / express编写,如下所示:

var express = require('express');
var fs      = require('fs');

var Sample = function() {
    var self = this;

    self.setupVariables = function() {
        self.ipaddress = process.env.OPENSHIFT_NODEJS_IP;
        self.port      = process.env.OPENSHIFT_NODEJS_PORT || 8080;

        if(process.env.OPENSHIFT_MONGODB_DB_PASSWORD){
          connection_string = process.env.OPENSHIFT_MONGODB_DB_USERNAME + ":" +
          process.env.OPENSHIFT_MONGODB_DB_PASSWORD + "@" +
          process.env.OPENSHIFT_MONGODB_DB_HOST + ':' +
          process.env.OPENSHIFT_MONGODB_DB_PORT + '/' +
          process.env.OPENSHIFT_APP_NAME;
        }
        console.log(connection_string)
    };

    self.createRoutes = function() {
        self.routes = { };

        self.routes['/'] = function(req, res) {
            res.setHeader('Content-Type', 'text/html');
            res.send(self.cache_get('index.html') );
        };

        self.routes['/testdata'] = function(req, res) {
          console.log('Got request for testdata')
          res.setHeader('Content-Type', 'application/json');

          MongoClient.connect('mongodb://'+connection_string, function(err, db) {
            if(err) throw err;
            var collection = db.collection('TestData').find().limit(10).toArray(function(err, docs) {
              if(err) throw err;
              res.send(docs);
              db.close();
            })
          })
        }
    };

    self.initializeServer = function() {
        self.createRoutes();
        self.app = express();
        ['js'].forEach( function(dir) {
          self.app.use('/'+dir, express.static(__dirname+'/'+dir));
        })

        //  Add handlers for the app (from the routes).
        self.app.get(function(req, res, next) {
          console.log('Got request:', req);       // used to debug
          next();
        });

        for (var r in self.routes) {
            self.app.get(r, self.routes[r]);
        }
    };

    self.initialize = function() {
        self.setupVariables();
        self.initializeServer();
    };

    self.start = function() {
        self.app.listen(self.port, self.ipaddress)
        });
    };
var myapp = new Sample();
myapp.initialize();
myapp.start();

我的客户端(index.html)代码是:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
</head>
<body>
  <script>
    // Get data from server
    var xmlHttp = null;
    xmlHttp = new XMLHttpRequest();
    xmlHttp.open( "GET", "http://my.example.com/", true);
    xmlHttp.send( "/testdata" );
    xmlHttp.onreadystatechange=function() {
      if (xmlHttp.readyState==4 && xmlHttp.status==200) {
        var data = xmlHttp.responseText

        window.onload = function() {
          document.getElementById('p1').innerHTML = data
        }
      }
    }
  </script>
  <p id="p1"></p>
</body>
</html>

我的目标是从数据库中获取数据以在html页面上使用。我试图通过从服务器发出xmlhttprequest来获取/testdata来做到这一点。然后我认为服务器应该将该请求路由到适当的函数。但是当我运行这个时(好吧,这篇文章包含了我为这篇文章删除的许多其他无关的东西),请求就在那里xmlHttp.status=1

答案的两个选项: 1)有什么问题? 2)我怎么去调试这个问题?服务器是远程托管的,因此我不认为我可以使用节点检查器之类的工具。

1 个答案:

答案 0 :(得分:0)

我认为您误解了如何使用XHR send()。它实际上是用于发送数据,例如POST,PUT或DELETE。您希望在/testdata调用中实际将open()作为网址的一部分,并且只使用.send()