首页 文章

Node Express发送后无法设置标头

提问于
浏览
-1

我知道已经有多种方式提出这个问题,但我的问题似乎与已发布的问题有所不同 .

我正在尝试将表单中的数据发送到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 回答

  • 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");
    

    这将导致回调写入多次调用响应,在发送第一个主体后尝试再次写入 Headers 时失败 .

    你要么在调用 callback 之后想要 return ,要么最后只想用累积的 errors 调用它一次 .

  • 0

    事实证明,这是因为从Firebase检索更改数据而不是仅在加载时检索数据 .

相关问题