我知道已经有多种方式提出这个问题,但我的问题似乎与已发布的问题有所不同。
我尝试将表单中的数据发送到google firebase。我有一个使用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中遇到的错误。
错误:/Users/keegan/WebstormProjects/hack4health/views/error.hbs: 发送后无法设置标头。 在ServerResponse.OutgoingMessage.setHeader(_http_outgoing.js:356:11) 在ServerResponse.header(/Users/keegan/WebstormProjects/hack4health/node_modules/express/lib/response.js:719:10) 在ServerResponse.send(/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) at /Users/keegan/WebstormProjects/hack4health/node_modules/hbs/lib/hbs.js:93:9 完成后(/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 完成后(/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
答案 0 :(得分:2)
在这里,您最多呼叫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");
这将导致回调写入多次被调用的响应,在发送第一个主体后尝试再次写入标题时失败。
您需要在致电return
后callback
,或者您希望最后只使用累计的errors
拨打一次。
答案 1 :(得分:0)
原来这是因为从Firebase检索更改数据而不是仅在加载时检索数据。