我知道已经有多种方式提出这个问题,但我的问题似乎与已发布的问题有所不同 .
我正在尝试将表单中的数据发送到google firebase . 我有一个使用快递的节点应用程序 .
这是我将数据发送到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中遇到的错误 .
错误:/Users/keegan/WebstormProjects/hack4health/views/error.hbs:发送后无法设置标头 . 在ServerResponse.send的ServerResponse.OutgoingMessage.setHeader(_http_outgoing.js:356:11)处于ServerResponse.header(/Users/keegan/WebstormProjects/hack4health/node_modules/express/lib/response.js:719:10)(/ Users) /keegan/WebstormProjects/hack4health/node_modules/express/lib/response.js:164:12)res.render.done(/Users/keegan/WebstormProjects/hack4health/node_modules/express/lib/response.js:956:10 )/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 atUsers/keegan/WebstormProjects/hack4health/node_modules/hbs/lib/hbs.js:69:11 at done(/用户/ keegan / WebstormProjects / hack4health / node_modules / hbs / lib / async.js:74:20)/Users/keegan/WebstormProjects/hack4health/node_modules/hbs/lib/hbs.js:64:20
2 回答
在这里你最多调用
callback
三次:这将导致回调写入多次调用响应,在发送第一个主体后尝试再次写入 Headers 时失败 .
你要么在调用
callback
之后想要return
,要么最后只想用累积的errors
调用它一次 .事实证明,这是因为从Firebase检索更改数据而不是仅在加载时检索数据 .