2016-02-08 53 views
0

我目前在Raspberry Pi上運行SailsJS,並且所有工作都很好,但是當我嘗試響應結果時,執行sails.models.nameofmodel.count()時,得到一個空的答覆。對長時間運行查詢的空響應SailsJS

getListCount: function(req,res) 
    { 
      var mainsource = req.param("source"); 

      if(mainsource) 
      { 
       sails.models.gatherer.find({source: mainsource}).exec(
         function(error, found) 
         { 
           if(error) 
           { 
             return res.serverError("Error in call"); 
           } 
           else 
           { 
             sails.log("Number found "+found.length); 
             return res.ok({count: found.length}); 
           } 
         } 
       ); 
     } 
     else 
     { 
       return res.ok("Error in parameter"); 
     } 
}, 

我可以在日誌中看到找到的號碼(73689)。但是,當我回應時,我仍然得到一個空的迴應我正在使用默認股票ok.js文件,但是我堅持在額外的日誌記錄中嘗試調試並確保它正在經歷正確的路徑。我能確認ok.js打算通過此路徑

if (req.wantsJSON) { 
    return res.jsonx(data); 
} 

我也嘗試添加.populate()的號召.exec(),res.status(200)之前,我發出去之前一個res.send()而不是res.ok()。我也更新了Sails到11.5,並且仍然得到相同的空響應。我還使用了一個sails.models.gatherer.count()調用,結果相同。

+0

不應該像在文檔中提到的那樣在每個res.ok()調用之前包含'return'嗎? 'res.serverError()'同樣。看到這裏:http://sailsjs.org/documentation/reference/response-res/res-ok – Rai

+0

我沒有添加到回調,但仍然得到一個空的響應錯誤。當你使用res.ok()或res.serverError()時,它將進入響應,並在響應中使用返回res.jsonx(data)。 – macleod2486

+0

如果你添加了'return',請把它添加到你的文章上面?另外,請告訴你如何調用'getListCount'。 – Rai

回答

0

您可以嘗試將一些日誌記錄添加到方法的開頭,以捕獲mainsource的值。我不相信你需要爲任何響應對象調用使用明確的return

如果一切正常存在,儘量消除模型的查找方法,只是要求進行評價參數和返回一個簡單的迴應:

getListCount: function(req, res) { 
    var mainsource = req.param("source"); 
    sails.log("Value of mainsource:" + mainsource); 

    if (mainsource) { 
     res.send("Hello!"); 
    } else { 
     res.badRequest("Sorry, missing source."); 
    } 
} 

如果不工作,那麼你的模型數據實際上可能不根據您提供的標準進行匹配,問題可能存在;在這種情況下,您的回覆將爲空。您提到您確實在日誌語句中看到了查詢的結果計數。如果res.badRequest也爲空,那麼sailsjs中安裝的express版本可能有問題。你提到你有11.5sailsjs。我會假設你的意思是0.11.5

這就是在package.json發現0.11.5

"express": "^3.21.0", 

檢查GitHub的問題中的任何可能的錯誤爲sailsjs關於express和響應對象處理和express以上版本。

使用最新的sailsjs版本(0.12.0)執行全新安裝可能是值得的,並查看是否可以解決您的問題。

另一個問題可能是您如何處理回覆。在這種情況下,.exec應立即執行查詢(即同步調用)並在完成時返回響應。所以那裏不應該有異步處理。

如果您可以顯示消耗響應的代碼,那將會有所幫助。我假設有一個視圖通過AJAX或正在執行的某種形式的POST顯示響應。如果那是你看到空響應的地方,那麼問題可能在於視圖層而不是控制器/模型。

如果您通過HTTP遇到真正的超時錯誤,即使您的查詢返回的結果是及時的,那麼您可能需要考慮使用異步處理與sailjs。看看這篇文章,而不是使用Promise