【问题标题】:Sending result set back to client in node.js在 node.js 中将结果集发送回客户端
【发布时间】:2013-01-28 01:18:42
【问题描述】:

我在使用 Node.js 将结果集返回给客户端时遇到问题。我是新手并将其用于项目,但我被卡住了,不知道为什么。情况如下:我有一个网页、一个服务器、一个请求处理程序和一个数据库接口。我能够毫无问题地在客户端和服务器之间来回发送数据。唯一不起作用的是当我尝试将查询结果发送回客户端时。

function doSomething(response)
{
    var data = {
        'name': 'doSomething'
    };

    response.writeHead(200, {'Content-Type': 'text/html', 'Access-Control-Allow-Origin': '*'});     
    response.end(JSON.stringify(data));
}

这很好用,因为我可以从客户端的对象中读取名称,但是

function fetchAllIDs(response)
{
    dbInterface.fetchAllIDs(function(data) {
        // console.log(data) prints the correct information here        
        response.writeHead(200, {'Content-Type': 'text/html', 'Access-Control-Allow-Origin': '*'});     
        response.end(data);
        // console.log(data) from the client side is just blank
    });
}

我认为问题在于我处理回调和响应的方式,因为在不尝试使用 mysql 的情况下,我的其余代码可以正常工作。谢谢!

编辑:我删除了一个似乎让人们感到困惑的代码。这只是为了表明,如果我在回调之外有响应代码,那么我可以将任何数据返回到服务器。在我的实际代码中,我没有将两个响应语句放在一起。我只是无法将 fetchAllIDs 函数中的行返回给客户端。

【问题讨论】:

  • 你试过做 response.write(data); response.end();反而?编辑:同一个函数有 2 个末端吗??
  • 是的,我也尝试过,但没有任何区别。我只在回调之外添加了第二端,以表明当我把它放在那里时,我能够从响应中获取数据。在我的代码中,我有一种方式或另一种方式,而不是两种方式。

标签: node.js node-mysql


【解决方案1】:

你写它的方式意味着

reponse.end('This string is received by the client'); 

line 总是在回调函数之前调用,意味着响应已经结束。

在 JS 下,所有代码都将在下一个事件(您的回调函数)从队列中取出之前完成。注释掉上面的行 // 并测试它

【讨论】:

  • 您好,感谢您的意见。你可以看看我的编辑,因为我展示它的方式让人们感到困惑。在我的代码中,我没有那行,但它仍然不起作用。
  • 好的,如果我将您在 JSON.stringify(data) 中的第一部分放入第二个函数中,它对我有用。除此之外,我被难住了
猜你喜欢
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
  • 1970-01-01
  • 2021-04-23
  • 2014-03-01
相关资源
最近更新 更多