app.render()不在浏览器中显示

时间:2014-01-08 14:57:00

标签: node.js express

我正在尝试使用app.render()在浏览器中显示jade文件。在以下代码中,html正确显示在控制台上,但浏览器从不显示相关文件。

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
});

所以,我想要发生的是当SQL连接发生err时,执行/unavailable处理程序并显示一个静态html页面,说明服务已关闭。但是,因为错误发生在服务器而不是客户端上,所以我当时无法访问response对象。我正在尝试人工制造客户端在浏览器中“重定向”到/不可用以查看消息。

2 个答案:

答案 0 :(得分: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?

答案 1 :(得分:0)

保存全局var sqlOK = false,在sql.open回调中设置它,如果在sqlOK不为真时收到请求,则重定向到/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
    }
});