xhttp向express.js服务器发出GET请求 - 没有返回任何内容

时间:2017-06-16 22:07:30

标签: node.js express

我正在尝试向express.js服务器执行简单的xhttp GET请求。不幸的是,我没有得到这个代码的响应数据。连接很好,因为我已成功使用“res.send”从服务器发回一个正文。

我不确定我在服务器上使用“findOne”是否不正确,或者我在客户端使用xhttp是否不正确。我怀疑是客户。

我很感激任何建议。

*客户代码*

function getfood() {
    var xhttp = new XMLHttpRequest();
    xhttp.open("GET", "http://localhost:3000/clientfood", true);
    xhttp.send();
}

*服务器代码 - Express.js / Node *

app.get('/clientfood', cors(), (req, res) => { 
  //res.send('test'); //this works at least
  db.collection('quotes').findOne({
     "_id": ObjectId("12345")
  },
  {
    name: 1,
    quote: 1
  })
})

2 个答案:

答案 0 :(得分:1)

  

xhttp向express.js服务器发出GET请求 - 没有返回

您的服务器代码未返回响应。您需要执行res.send(...)res.json(...)之类的操作才能将响应返回给调用者,并且您需要在数据库提供的回调中执行此操作以回传查询结果(在大多数数据库中) ,您可以使用普通回调或承诺。

您的客户端代码不会收听回复。如何执行此操作的示例here on MDN通常为:

function getfood() {
    var xhttp = new XMLHttpRequest();
    xhttp.addEventListener("load", function() {
        if (xhttp.status === 200) {
            // have data in xhttp.responseText, process it here
        } else {
            // got some other response here
        }
    });
    xhttp.open("GET", "http://localhost:3000/clientfood", true);
    xhttp.send();
}

答案 1 :(得分:0)

非常感谢 - 特别是@jfriend00。我有很多东西可以学习这些框架是如何工作的。在听取了关于SEND的建议之后,我在前端看到结果时遇到了一些麻烦。我收到了“承诺待决”的消息。我用这篇文章中建议的代码修复了它。 Express - Promise pending when loop queries 我还修改了我的findOne函数来获取我的id的整个对象。

最终代码:

commit 305b4c60f200ee8e6267ac75f3f5b5d09fda1079
Author: Daniel P. Berrange <berrange@redhat.com>
Date:   Mon May 15 17:47:11 2017 +0100

    qemu-img: introduce --target-image-opts for 'convert' command