Go语言 是什么原因导致c.HTML在Gin路由器的GetQuizController中无法工作?

inkz8wg9  于 2023-06-03  发布在  Go
关注(0)|答案(1)|浏览(184)

我是新来的。我在golang的gin框架中创建测验应用程序。从数据库中获取问题后,当我尝试使用c.HTML()在HTML页面中呈现问题时,c.HTML()不起作用。我不知道为什么。在其他控制器中我做了同样的事情,它工作得很好,但在GetQuizController中它不工作。请帮帮我
https://github.com/Shashwat5522/quizzapp

路由器编码

r := gin.Default()
r.LoadHTMLGlob("views/*")
Teacher := r.Group("/teacher", SessionHandler)
    {
        Teacher.GET("/teacherpanel", controllers.TeacherPanelController)
        Teacher.GET("/createquizz", controllers.CreateQuizController)
        Teacher.POST("/createquizz", controllers.PostQuizController)
        Teacher.GET("/addstudent", controllers.AddStudentController)
        Teacher.POST("/addstudent", controllers.PostStudentController)
        Teacher.GET("/listofquiz", controllers.GetListOfQuizController)
        Teacher.GET("/quiz",controllers.GetQuizController)
    }

控制器代码

func GetQuizController(c *gin.Context) {

    fmt.Println("get quiz controller called")
    quizname := c.Query("quizname")
    var questions []models.Questions
    dbconnection.DB.Debug().Model(&models.Quiz{}).Select("quizzes.quiz_name,questions.question,questions.option_a,questions.option_b,questions.option_c,questions.option_d,questions.answer,questions.difficulty").Joins("inner join questions on questions.quiz_id=quizzes.id").Where("quizzes.quiz_name=?", quizname).Scan(&questions)
    fmt.Println(questions)

    c.HTML(200,"showquiz.html",gin.H{
        "data":questions,
    })
}

在此GetQuizController中,c.HTML不起作用。请帮帮我

9rygscc1

9rygscc11#

看来你不知道如何描述这个问题,所以我将描述我所做的和我发现的问题。如果您认为您遇到了其他问题,请编辑您的问题,以描述您所做的事情以及错误所在,如下图所示。
1.使用Docker启动MySQL服务器:

docker run -d --name mariadb -e MARIADB_ROOT_PASSWORD=root -p 3306:3306 mariadb:10.11.2

1.创建一个名为quizzapplication的数据库:

docker exec mariadb mysql --password=root -e 'CREATE DATABASE quizzapplication;'

1.克隆仓库(提交为bfda880):

git clone https://github.com/Shashwat5522/quizzapp.git

1.更改工作目录

cd quizzapp/Quizz-Application

1.添加缺少的模块并删除未使用的模块

go mod tidy

go.mod文件需要gorm.io/driver/postgres,但源代码导入了gorm.io/driver/mysql。运行go mod tidy来更正它。
1.迁移数据库

go run ./migration

1.启动Web服务器:

go run .

1.打开一个新的终端并发送一个请求:

curl 'http://localhost:8080/teacher/quiz'

输出为:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Login-Form</title>
</head>
<body>
<h1>Login-Form</h1>
    <form action="/authentication/Login" method="post">
        <label for="email">Email</label>
        <input type="email" id="email" name="email"><br>
        <label for="password">Password</label>
        <input type="text" id="password" name="password"><br>

        <input type="submit" value="submit">
    </form>
    <h1></h1>
</body>
</html><h1>Show quizz</h1>

<h1>Show quizz</h1></html>标记之后呈现。这不是有效的HTML。这是因为您没有在SessionHandler中调用c.Abort()。它可以像这样修复:

func SessionHandler(c *gin.Context) {
    fmt.Println("session is called")

    session := sessions.Default(c)
    fmt.Println(session.Get("userID"))
    if session.Get("userID") == nil {
        c.HTML(200, "login.html", nil)
+       c.Abort()
    }
  }

我相信源代码中还有其他问题。但我不会审查整个项目,并找出所有的。这只是一个演示,展示如何清楚地描述问题。
请记住,请保持问题的焦点。发布一个充满问题的项目并要求其他人找出它们是不好的。

相关问题