Node.js发送后无法设置标头。 在另一个XHR请求中启动XHR请求时

Node.js无法处理我的客户端代码,它执行类似于jQuery / Zepto XHR模式的内容:

$.ajax({ type: 'POST', url: '/someUrl', success: function(response) { $.ajax({ // ... do another XHR 

我已经在其他框架中完成了这个(在另一个XHR请求中发起XHR请求)模式。 我读过有关Node.js错误:无法在发送标头后设置标头以及Node.js服务器的基于事件的模型如何工作。 换句话说,第一个XHR请求没有调用res.end()所以当第二个XHR请求被调用时Node.js会抱怨(在一个连续的循环btw中)。

我的问题是:是否有人能够推荐一种替代模式来链接客户端的XHR请求? 有什么东西我可以做Node.js服务器端来保持现有的客户端模式?

根据接受的答案更新
错误肯定在我自己的服务器端代码中。 一个简单的validation函数抛出一个错误,但在捕获它时,只调用了res.end()。 出于某种原因我假设调用res.end()会立即停止执行该函数。 在这种情况下,插入“return”会在将JSON消息发送到客户端后立即停止执行。

 if (_.isEmpty(req.body)) { res.end(JSON.stringify({'Error':'POST required'})); // suppose 'return' is needed here as well return } else { try { if (_.has(req.body, 'id')) { id = parseInt(req.body['id']); } else { throw {'Error':'Missing param in req.body'}; } // end if } catch(err) { res.end(JSON.stringify({'Error':'Missing key(s)','Keys':_.keys(req.body)})); // without a return here, the code below this 'do some more work' would // be executed return } // end else // do some more work // without the above 'return''s the code would // a) make a database call // b) call res.end() again!!! <-- bad. 

问题不在于你的想法。 由于回调,您的两个XHR以串行方式发生,而不是并行发生。 第一个请求的success回调将不会触发,直到第一个请求的整个请求/响应过程完成(node.js已经调用了response.end()并且浏览器已经接收并解析了响应)。 只有这样才能开始第二次XHR。 您拥有的客户端AJAX模式很好。 它可以同样适用于node.js和任何其他Web服务器。

您的问题出在服务器端node.js代码中,但它不是节点中的错误或限制,这是您的编程错误。 发布您的服务器端代码,我们可以帮助您跟踪它。 node.js初学者通过简单的编码错误来解决这个错误是很常见的。