Javascript 在从登录到服务器的阵列中存储用户名

Javascript 在从登录到服务器的阵列中存储用户名,javascript,html,arrays,angularjs,go,Javascript,Html,Arrays,Angularjs,Go,我有一个小型Go web服务器,在用户登录时向他们显示数据。我试图解决的问题是,当特定用户登录时,网页只显示某些信息。例如,当管理员登录时,他们可以在网页上看到一个仅限管理员的项目列表 我遇到的问题是,出于某种原因,我的Go代码没有将用户名存储在我调用的数组中,因此当我将其传递给JavaScript时,它是空的 下面是我正在努力解决的代码的3个主要部分: main.go package main import "fmt" func authHandler(w http.ResponseWri

我有一个小型Go web服务器,在用户登录时向他们显示数据。我试图解决的问题是,当特定用户登录时,网页只显示某些信息。例如,当管理员登录时,他们可以在网页上看到一个仅限管理员的项目列表

我遇到的问题是,出于某种原因,我的Go代码没有将用户名存储在我调用的数组中,因此当我将其传递给JavaScript时,它是空的

下面是我正在努力解决的代码的3个主要部分:

main.go

package main

import "fmt"

func authHandler(w http.ResponseWriter, r *http.Request) {
    r.ParseForm()
    usernameArray, hasUsername := r.PostForm["j_username"]

    //This line added for debugging purposes
    log.Println("username:", usernameArray[0])

    if hasUsername {
        fmt.Fprintf(w, "%s", usernameArray[0])
    }
}

func main() {
    http.HandleFunc("/getAuth", authHandler)
}

javascript.js

注意,这是AngularJS

$scope.init = function() {
    checkAuthentication();
};

checkAuthentication = function() {
    $http.get("/getAuth").then(
    function(response) {
        var username = response.data;

        console.log(username): //Added for debugging purposes

        if (username === "admin") {
            $scope.showAdminOnlyItems = true;
        }
    });
}

main.html

<div id="admin-only-items" ng-show="showAdminOnlyItems">
    <hr style="border:1px solid">
    <p style="text-align: center">admin only: </p>
    <div id="adminOnlyButtom">
        <button class="button" data-ng-click="doSomething()">Do something</button>
    </div>
</div>

所以很明显usernameArray是空的,不确定我做错了什么。有人能告诉我为什么authHandler中的usernameArray是空的吗?

首先,我可以看到您向服务器发送
GET
请求时没有
j_username
query参数,因此您无法读取服务器端的
j_username

第二个,
usernameArray
是空片,在解析
j_username
时失败。尝试调用
usernameArray[0]
时,出现
索引超出范围的错误

您应该使用
j_username
发送
GET
请求,就像
/getAuth?j_username=admin
那样,并从服务器修改代码

    usernameArray, hasUsername := r.URL.Query()["j_username"]
    //This line added for debugging purposes
    log.Println("debug here :", usernameArray)

    if hasUsername {
        fmt.Fprintf(w, "%s", usernameArray[0])
        return
    }

    // Send an error message to client
    http.Error(w, `missing username`, 500)

您应该检查从
r.ParseForm()
返回的
error
值,并改用
r.PostFormValue()
。还要注意,r.PostFormValue()将用于PUT、PATCH或POST。您正在发送一个http GET方法,该方法不用于发送任何数据。您首先是如何发送请求数据的?javascript代码只发送GET请求,没有数据。
    usernameArray, hasUsername := r.URL.Query()["j_username"]
    //This line added for debugging purposes
    log.Println("debug here :", usernameArray)

    if hasUsername {
        fmt.Fprintf(w, "%s", usernameArray[0])
        return
    }

    // Send an error message to client
    http.Error(w, `missing username`, 500)