我正在尝试使用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
对象。我正在尝试人工制造客户端在浏览器中“重定向”到/不可用以查看消息。
答案 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
}
});