2014-01-08 158 views
0

我試圖使用app.render()在瀏覽器中顯示一個jade文件。在下面的代碼中,html正確顯示到控制檯,但瀏覽器從不顯示相關文件。app.render()在瀏覽器中不顯示

app.render('unavailable', {title: 'Unavailable'}, function(err, html){ 
      console.log(html); 

     }); 

編輯:

我有這樣的處理程序:

app.get('/unavailable', display.unavailable); 

那麼這個代碼在同一個文件下面(app.js)我有這樣的:

sql.open(connStr, function(err, sqlconn){ 
    if(err){ 
     console.error("Could not connect to sql: ", err); 

    else 
     conn = sqlconn;  //save the sql connection globally for all client's to use 
}); 

所以,我想要發生的是err與SQL連接發生時,/unavailable處理程序是執行,並顯示一個靜態html頁面,說服務已關閉。但是,由於錯誤發生在服務器上,而不是客戶端上,因此我當時無法訪問response對象。我試圖人爲地製造客戶端'重定向'到/在他們的瀏覽器無法看到消息。

+0

什麼是'display.unavailable'?它可能是某種功能。你必須以我在我的回答中描述的方式改變它。 – freakish

+0

它是,它有一個res.render在那裏。但是,'/ unavailable'永遠不會被執行(處理程序),因爲客戶端瀏覽器保持在同一頁面上。我試圖想出一種方法來強制客戶端的瀏覽器從服務器重定向。 – gjw80

+0

對,那麼在這種情況下閱讀柏拉圖的答案。 – freakish

回答

0

很明顯,您不會將html發送到瀏覽器。使用res.render沒有回調的路線內,即

res.render('unavailable', {title: 'Unavailable'}); 

或發送渲染喜歡這裏的結果:

app.render('unavailable', {title: 'Unavailable'}, function(err, html){ 
    console.log(html); 
    res.send(html); 
}); 

瞭解更多關於這裏的區別:

What's the difference between "app.render" and "res.render" in express.js?

+0

請在原文中查看我的編輯。 – gjw80

0

節省global var sqlOK = false,將其設置爲sql.open回調,如果在sqlOK爲n時收到請求,則重定向至/unavailable不錯。你也錯過了else語句的括號。

var sqlOK = false; 

app.get('/unavailable', display.unavailable); 

app.get('*', function(req, res, next){ 
    if(!sqlOK){ 
    return res.redirect('/unavailable'); 
    //return res.send(500) 
    }; 
    next(); 
}); 

sql.open(connStr, function(err, sqlconn){ 
    if(err){ 
     console.error("Could not connect to sql: ", err); 

    } else { 
     conn = sqlconn;  //save the sql connection globally for all client's to use 
     sqlOK = true 
    } 
}); 
+0

''/ unavailable''處理程序應該在''*''處理程序之前設置。否則,它將運行到無限重定向循環。 – freakish

+0

我仍然遇到無法自動重定向到/不可用的問題。如果用戶登錄一個頁面,然後做一些需要sql連接的東西,則會發生錯誤。處理程序不會捕獲它,直到頁面更改爲任何其他處理程序的情況。因此,用戶將會看到顯示的錯誤頁面而停留在同一頁面上。 – gjw80

+0

怪異的是正確的,編輯交換命令 – Plato