【问题标题】:Full ajax requests or more routes完整的 ajax 请求或更多路由
【发布时间】:2014-11-08 20:19:12
【问题描述】:

我打算编写我的 node.js 网页。

我正在使用 node.js 和 express 和 jam 模板。

我想使用对服务器的 POST AJAX 请求使其完全异步。 我的意思是只有一条路线,例如:

router.get('/', function(req, res) {
    res.render('index', { "some": 'parameters'});
}

我正在通过客户端 ajax 调用请求,例如:

$("#logout").click(function(event){
    event.preventDefault();
    var payload = {
        command: 'logout'
    };
    $.ajax({
        url: "/main_page_ajax",
        type: "POST",
        datatype: "json",
        contentType: "application/json; charset=utf-8",
        processData: false,
        data: JSON.stringify(payload),
        success: function (result) {
            var json = jQuery.parseJSON(result);
            if(json.done==1){
                $('#login_screen_clear').fadeIn("slow");
                $('#login_screen_logged').hide();
                show_message('Logout successful!');
            }
            else show_message('Something went wrong...!');
        }
    });
}); 

玉模板部分(index.jade):

#login_screen_logged
    .log_div
        h3 Hello 
            b#logged_name
            | !
        br
        br
        a#logout(href='/logout') Logout
#login_screen_clear
    //login form
    input#player_login(type='text', size='15', autocomplete='off')
    input#player_pass(type='password', size='15', autocomplete='off')
    input#login_button(type='submit', value='Login')

回到服务器端。处理 ajax 请求:

router.post('/main_page_ajax', function(req, res) {
   switch(String(req.body.command)){
       case 'logout':
           var resultJson = { };
           req.session.destroy(function(err) {
               resultJson.done=1;
               res.end(JSON.stringify(resultJson));
           });
       break;
   }
});

好的,这是我的问题:

  1. 这对 node.js 应用程序来说是个好方法吗?

  2. 这种方式将使我将几乎所有容器存储在 index.jade 模板(隐藏的 div)中,这些容器将等待特定的调用。所以这个文件会随着更多的应用程序开发而增长很多。 有没有更好的地方来保存 html/jade 代码?也许 Ajax 要求它自己?示例

    success: function (result) {
        var json = jQuery.parseJSON(result);
            if(json.done==1){
                $('#login_screen_clear').html("<a><bunch><of><html><code>")
                $('#login_screen_clear').fadeIn("slow");
                $('#login_screen_logged').hide();
                show_message('Logout Successful!');
            }
            else show_message('Something went wrong...!');
    }
    

我希望有人能理解我的担忧并以正确的方式指出我。

附言。对不起我的英语不好。

【问题讨论】:

标签: javascript ajax html node.js pug


【解决方案1】:

不要这样做。查看宁静的服务如何安排他们的路线。 例如,您注销用户的路径如下所示:

router.post('/profile/:name/logout', function(req, res) {
    req.session.name = null; //Flush session if you are using express
    var token = req.session.token || '';
    token.invalidate(token); //Function to remove token from redis or whatever you are using
    res.status(200);
});

因此,此路由将刷新与帐户关联的所有会话和/或令牌,并返回 200 响应。

至于翡翠模板,我建议你看一下车把模板以及如何serve templates from the server。除了更明智之外,它们也更快。我个人在客户端和服务器端都使用它。

还有get请求;人们通常在没有任何身份验证的情况下提供 html,当浏览器接收到有效负载时,客户端 javascript 通过 ajax 和/或jwt 对用户进行身份验证。

哦,你的英语很不错。

【讨论】:

  • 好的,所以路线是更好的方式。你能告诉我一些关于使用带把手的翡翠模板的例子吗?
  • 我建议将车把作为玉模板的替代品。如果您想使用车把进行快递,这里有一个不错的包:npmjs.org/package/express-handlebars
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-27
  • 2018-03-26
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多