簡體   English   中英

發送節點后,Node Express無法設置標題

[英]Node Express Can't set headers after they are sent

我知道已經以多種方式提出了這個問題,但是我的問題似乎與已經發布的問題有所不同。

我正在嘗試將數據從表單發送到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.send(/ Users)的ServerResponse.header(/Users/keegan/WebstormProjects/hack4health/node_modules/express/lib/response.js:719:10)的ServerResponse.OutgoingMessage.setHeader(_http_outgoing.js:356:11) /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完成時(/Users/keegan/WebstormProjects/hack4health/node_modules/hbs/lib/async.js:74:20)在/Users/keegan/WebstormProjects/hack4health/node_modules/hbs/lib/hbs.js:88:18在/Users/keegan/WebstormProjects/hack4health/node_modules/hbs/lib/hbs.js:69:11在完成時(/用戶/keegan/WebstormProjects/hack4health/node_modules/hbs/lib/async.js:74:20)位於/Users/keegan/WebstormProjects/hack4health/node_modules/hbs/lib/hbs.js:64:20

在這里,您最多調用三次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");

這將導致多次寫入響應的回調,在發送第一個正文后嘗試再次寫入標頭時失敗。

您可能要在調用callbackreturn ,或者您只想在出現累積errors僅調用一次。

事實證明,這是由於從Firebase檢索更改時的數據引起的,而不是僅在加載后檢索數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM