Node Express发送后无法设置标题
我知道这已被多种方式询问过,但我的问题似乎与已发布的问题有所不同。Node Express发送后无法设置标题
我试图从窗体发送数据到谷歌的Firebase。我有一个使用快递的节点应用程序。
这里是我的功能是将数据发送到火力点:
function validateForm() {
async.series([
function (callback) {
var errors = "<strong>The following errors were entered:\n";
var name = $('#name').val();
var story = $('#story').val();
if (name.length < 1) {
errors += "\n-Please enter a valid name";
callback("Please enter a valid name", null);
}
if (story.length < 1) {
errors += "\n-Please enter a valid story";
callback("Please enter a valid story", null);
}
console.log("FInished validating");
callback(null, "finished validating");
}, function (callback) {
firebase.database().ref('stories/' + Date.now()).set({
name: name,
story: story
}, function() {
console.log("Firebase callback");
callback(null, "sent data!");
});
}, function (callback) {
console.log("Finished!");
callback(null, "done")
}
])
}
(增加了一些console.logging为清楚起见,以确保我有权利的回调)
提交是触发通过点击div的样式看起来像一个按钮,所以我知道没有导致问题的表单问题的默认行为。以下是我在Node中遇到的错误。
Error: /Users/keegan/WebstormProjects/hack4health/views/error.hbs: Can't set headers after they are sent. at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:356:11) at ServerResponse.header (/Users/keegan/WebstormProjects/hack4health/node_modules/express/lib/response.js:719:10) at ServerResponse.send (/Users/keegan/WebstormProjects/hack4health/node_modules/express/lib/response.js:164:12) at res.render.done (/Users/keegan/WebstormProjects/hack4health/node_modules/express/lib/response.js:956:10) at /Users/keegan/WebstormProjects/hack4health/node_modules/hbs/lib/hbs.js:93:9 at done (/Users/keegan/WebstormProjects/hack4health/node_modules/hbs/lib/async.js:74:20) at /Users/keegan/WebstormProjects/hack4health/node_modules/hbs/lib/hbs.js:88:18 at /Users/keegan/WebstormProjects/hack4health/node_modules/hbs/lib/hbs.js:69:11 at done (/Users/keegan/WebstormProjects/hack4health/node_modules/hbs/lib/async.js:74:20) at /Users/keegan/WebstormProjects/hack4health/node_modules/hbs/lib/hbs.js:64:20
原来,这是由于从Firebase检索更改后的数据而导致的,而不是仅在加载时检索数据。
在这里,您所呼叫的callback
最多三次:
if (name.length < 1) {
…
callback("Please enter a valid name", null);
}
if (story.length < 1) {
…
callback("Please enter a valid story", null);
}
…
callback(null, "finished validating");
这将导致写入响应中多次调用,当它试图再次写入头失败的回调发送第一个主体后。
在致电callback
之后,您要么拨打return
,要么最后拨打电话errors
。
我提供的JS是客户端 – thekeegs
并有100%defo没有任何代码在您的应用程序的其他地方被触发?我曾经有过类似的情况,但之后它总是在其他地方变得很小。 – John