2014-01-08 82 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