【问题标题】:app.render() not displaying in browserapp.render() 不在浏览器中显示
【发布时间】:2014-01-08 23:39:17
【问题描述】:

我正在尝试使用 app.render() 在浏览器中显示一个玉文件。在以下代码中,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
});

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

【问题讨论】:

  • display.unavailable 是什么?它可能是某种功能。您必须按照我在回答中描述的方式进行更改。
  • 是的,而且里面有一个 res.render。但是,'/unavailable' 永远不会被执行(处理程序),因为客户端浏览器停留在同一页面上。我试图想出一种方法来强制客户端的浏览器从服务器重定向。
  • 对,那么请阅读柏拉图的答案。

标签: node.js express


【解决方案1】:

显然您不会将 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?

【讨论】:

    【解决方案2】:

    保存一个全局 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
        }
    });
    

    【讨论】:

    • '/unavailable' 处理程序应设置在'*' 处理程序之前。否则会陷入无限重定向循环。
    • 我仍然有无法自动重定向到 /unavailable 的问题。如果用户登录页面,然后执行需要 sql 连接的操作,则会发生错误。在页面更改为任何其他处理程序案例之前,处理程序不会捕获它。因此,用户将停留在同一页面上而看不到呈现的错误页面。
    • 如果用户发出的请求导致您建立 sql 连接(为什么您不在应用程序启动时创建一个并保持该连接以供所有用途使用?)那么您有责任在该路由处理程序中测试 sqlOK 并适当重定向
    • Hmmm.
    • App.render 是我试图解决这个问题的方法之一,在使用 app.render 时它没有显示我的预期,这就是我单独提出这个问题的原因。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 2017-03-24
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多