如何调试失败的 xmlhttprequest

How to debug failing xmlhttprequest

我正在尝试从服务器上的数据库中检索数据以使用客户端。它失败了,但实际上并没有抛出任何错误,我不知道如何调试它。

我的服务器是用 node.js/express 编写的,带有 MongoDB 数据库,看起来像:

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 来做到这一点。然后我认为服务器应该将该请求路由到适当的函数。但是当我 运行 这个(好吧,我为此 post 删除了很多其他无关内容的版本),请求就在那里 xmlHttp.status=1.

两个答案选项: 1)哪里出了问题? 2)我什至如何着手调试这个问题?服务器是远程托管的,所以我认为我不能使用像 node-inspector 这样的工具。

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