簡體   English   中英

Node.js res.send無法正常工作

[英]Node.js res.send is not working

在我的index.js中,我有一個導出功能,應該在按下提交按鈕時通過ajax將數據發送回客戶端。 但是,當用戶按下“提交”時,數據似乎在數據被修改之前就已經發送出去了。 再按一次提交時,它將發送先前已修改的數據,就像單擊提交按鈕僅發送“以前”的設置數據一樣。 這是我的代碼:

        var tabledata = getRecordFromDatabase(key);
        if(tabledata.length === 0)
            tabledata = 'There is no matched record in the database';
        res.contentType('text/html');
        res.send({'matched':tabledata});

因此,為了說明該錯誤:我在填寫表單后單擊“提交”,並收到消息“數據庫中沒有匹配的記錄”。 我第二次點擊了提交,但沒有更改我剛剛填寫的表格中的任何內容。 這次的記錄數據實際上是發送給我的。 為什么會這樣呢?

如果您在getRecordFromDatabase是異步且無阻塞的,則node.js的行為應為正常。 Node.js是非阻塞的-它不會停止並等待進程完成(除非有意將這些進程寫入阻塞狀態,通常在node.js中避免)。 這是有益的,因為它使服務器可以自由接受新請求並一次處理許多請求。

如果您的數據庫調用是異步的,則在res.send()之前,您不必等待它返回。 這就是為什么您的首次提交返回為空的原因。 最有可能的是,當您再次單擊提交時,您的數據庫調用終於返回了,這就是為什么您得到結果的原因。

很難為您的問題提供基於代碼的答案,因為您已經抽象了DB調用方法中正在發生的事情。 但通常情況下,異步調用將如下所示:

getRecordFromDatabase(key, function(err, data){
    if(data.length === 0)
        data = 'There is no matched record in the database';
    res.contentType('text/html');
    res.send({'matched':data});
});

這樣,您就將一個函數作為回調傳遞給異步方法-當異步調用完成時,它將執行回調,然后使用適當的數據執行res.send()

暫無
暫無

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

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