如何清晰地分离前端和后端逻辑


How to clearly separate front-end and back-end logic

我学习了一些关于记录表单的在线教程,但在我看来它们太简单了。我的意思是,他们总是将用户名和密码发送到同一个PHP页面,该页面同时进行身份验证和显示结果。

我只是想知道是否可以将前端和后端的逻辑分开。前端只负责发送和接收请求,后端负责数据库连接和身份验证。后端应将结果发送回前端,前端会相应地显示结果。

我不得不承认,我是网络开发的新手,我真的不知道这是否是正确的方向,因此请寻求您的专业帮助。

下面是我的设计,

前端有一个按钮,它调用javascript函数来发送和接收请求。

<button type="button" onclick="javascript:queryLogin()">

Javascript函数准备发布请求和接收响应。

    function queryLogin() {
        var username = document.getElementById('username').value;
        var password = document.getElementById('password').value;
        var xmlhttp = new XMLHttpRequest();
        var parameters = "username="+username+"&"+"password="+password;
        xmlhttp.onreadystatechange=function() {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                statusLogin(xmlhttp.responseText);
            }
        }
        xmlhttp.open(/*method=*/"POST", /*url=*/"login_back.php", /*async=*/true);
        xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        xmlhttp.send(parameters);
    }
    function statusLogin(response) {
        var arr = JSON.parse(response);
        switch(arr.result) {
            case 0:   document.getElementById("message").innerHTML="";
                      break;
            default:  document.getElementById("message").innerHTML="";
                      /* TODO: How to destroy session? */
                      break;
        }
    }

因此,基本上我陷入了这种情况:如果身份验证失败,前端应该销毁会话,但现在的逻辑是javascript,很难销毁php会话。

请告诉我该怎么办。提前谢谢。

您所说的基本上是所谓的SPA或单页应用程序。在这种类型的站点中,应用程序逻辑几乎完全从服务器转移到客户端,这提供了允许您拥有极薄服务器设置的好处。传统上,你会看到像这样的网站在服务器端使用Node.js,因为那里要做的工作太少了,但你真的可以使用任何数据源,无论是Web API还是全栈Web应用程序。

然而,SPAs相当复杂。协调客户端上的所有工作不适合胆小的人,因为网络的任何组件都不适合这样做。这里,客户端框架,如Angular/Backbone/等。几乎是必要的,因为滚动自己的不仅浪费你的时间和资源,而且可能永远不会像社区发展的那样好。虽然在学习网络开发时,玩SPAs很有趣,但它们是一种非常糟糕的方式。在你有一些经验之前,我建议你走传统的服务器端路线,不要担心这样的事情。

以服务器端为中心的web应用程序可以和客户端一样具有性能,甚至更多,它将向您介绍使用服务器的概念,而这些概念可能会因为直接跳到客户端MVC/MVVM框架而被掩盖。