NodeJS重定向单页JQuery Mobile

时间:2016-01-06 12:54:40

标签: node.js jquery-mobile express

我正在使用JQuery Mobile(JQM)处理NodeJS / ExpressJS应用程序。我无法从后端重定向。我的应用程序动态生成按钮

<button class=\"setAttndingbtn btn btn-primary\" value=\"" + curr.place_id + "\">Attending: " + numAttending.numAttnd + " people are going</button>

在进行$ .getJSON搜索后

。使用promises / setTimeout,以下处理程序将附加到所有按钮:

$('.setAttndingbtn').click(function(){
  var buttonsir = $(this);    //Store this button reference  
  if($(this).html().slice(0,1) == 'A'){  //Check the button's state
       $.getJSON('/api/attending/' + $(this).val(), function(data){ //Ajax
             $(buttonsir).text("You are attending! " + data.numAttnd + " people are going"); //Change state
                       });
  } else {
       $.getJSON('/api/attending/rmv/' + $(this).val(), function(data){
             $(buttonsir).text("Attending: " + data.numAttnd + " people are going");
                        });
                    } 
                });

相关路线如下:

function isLoggedIn(req, res, next){
    if(req.isAuthenticated()){
        return next();
    } else {
        res.redirect('/login');
    }
}

  app.route('/login')
  .get(function(req, res){
        res.sendFile(p + "/public/login.html");
  });

  app.route('/api/attending/:number')
  .get(isLoggedIn, searchServerInstance.setAttending);

在后端,当一个&#34;参加&#34;单击按钮,我想检查用户是否已登录,如果没有,则将其重定向到登录页面。当我按原样运行代码时,在Firefox的Firebug控制台中,我看到了GET请求,如果我展开它,请在&#34;响应&#34;部分,显示我的登录页面的HTML代码。但该页面实际上并未加载该文件。

我的/login.html有<div data-role="page">,标题和内容标记,正如JQM推荐的那样。我已尝试将整个登录页面包含在我的/index.html中,但尝试使用res.redirect("/public/index.html#page2")会导致找不到&#34;文件&#34;。

是否可以使用Node / Express告诉JQM要加载哪个<div data-role="page" id="page1">?有没有办法强制JQM从服务器端加载/login.html,rel="external"允许的方式?或者我将不得不放弃JQM?

1 个答案:

答案 0 :(得分:0)

通过阅读JQM文档,我找到了一些方法来实现这一点。对于遇到它的其他人来说,这就是我相信我理解的:

  1. 如果您不关心维护单页的完整性,可以考虑关闭JQM's defaults,如ajaxEnabled,这会关闭JQM的哈希监听和ajax,正常加载URL 。我不知道这是否适用于Express的res.redirect,因为我没有尝试过。
  2. 我选择做的是用自定义JSON响应res.redirect('/login.html')替换res.send({loginState: "LOGIN"})。然后,在客户端,在$.getJSON侦听器中的$('.setAttndngbtn')请求中,我输入以下代码:
  3. if(data.loginstate !== "LOGIN"){
              $(buttonsir).text("You are attending! " + data.numAttnd + " people are going");
    } else {
              $(":mobile-pagecontainer").pagecontainer("change", '#page2');
    }
    

    它运作得很好!以下是pagecontainer小部件上的JQM文档,该文档允许使用change方法进行页内重定向或使用load方法进行外部重定向。