Пустая страница без ошибок при использовании сообщения в коде go - PullRequest
0 голосов
/ 07 октября 2019

Я новичок в программировании на Go и пишу функцию для публикации в альтернативном ключе в качестве автоинкрементации первичного ключа с использованием пакетов Go, Mysql и template.HTML.

После устранения неполадок в течение последних нескольких дней я загружаю пустую HTML-страницу.

Буду очень признателен за любые предложения по наилучшей практике или способам устранения неполадок в будущем.

Большое спасибо за любую помощь, которую вы готовы предложить!

Я использовал линтеры и средства форматирования, чтобы убедиться, что код правильно отформатирован, использовал операторы print и перестроил функцию и HTML-контентс нуля, чтобы сузить его.

Обработчик HTTP

package main

import (
    "database/sql"
    "fmt"
    "log"
    "net/http"
    "text/template"

    _ "github.com/go-sql-driver/mysql"
)

type watchInfo struct {
    ID    int
    Brand string
}

var (
    tpl *template.Template
    // cnn, err = sql.Open("mysql", "root:root@tcp(db:3306)/appdb")
)

//function to connect to db
func dbConn() (db *sql.DB) {
    dbDriver := "mysql"
    dbUser := "root"
    dbPass := "root"
    dbName := "appdb"
    db, err := sql.Open(dbDriver, dbUser+":"+dbPass+"@tcp"+"(db:3306)/"+dbName)
    if err != nil {
        fmt.Println("dbConn not work")
    }
    return db
}

func init() {
    tpl = template.Must(template.ParseGlob("/go/templates/*"))
}

func main() {
    http.HandleFunc("/", index)
    http.HandleFunc("/upload", uploadWatchInfo)
    http.ListenAndServe(":8080", nil)
}

//This function get watch id and brand using getWatch function and passes them to the gohtml template file
func index(w http.ResponseWriter, r *http.Request) {
    db := dbConn()
    defer db.Close()
    scanWatches, err := db.Query("SELECT * FROM watches order by id")
    if err != nil {
        log.Fatal(err)
    }
    err = db.Ping()
    if err != nil {
        fmt.Println(err.Error())
    }

    watch := watchInfo{}
    watchSlice := []watchInfo{}

    for scanWatches.Next() {
        var id int
        var brand string
        err = scanWatches.Scan(&id, &brand)
        if err != nil {
            fmt.Println("sW.Scan didn't work")
        }
        watch.ID = id
        watch.Brand = brand
        watchSlice = append(watchSlice, watch)

    }
    tpl.ExecuteTemplate(w, "pic.gohtml", watchSlice)

}

func uploadWatchInfo(w http.ResponseWriter, r *http.Request) {
    db := dbConn()
    defer db.Close()
    if r.Method == "POST" {
        brand := r.FormValue("brand")
        insForm, err := db.Prepare("INSERT INTO watches(brand) VALUES(?)")
        if err != nil {
            panic(err.Error)
        }
        insForm.Exec(brand)
        err = tpl.ExecuteTemplate(w, "upload.gohtml", watchInfo{Brand: brand})
        if err != nil {
            panic(err.Error)
        }
    }

}

//this is handling an error and can be called in other page functions
func HandleError(w http.ResponseWriter, err error) {
    if err != nil {
        fmt.Println("Index did not work. error in index")
    }
}

Шаблон HTML

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Upload page</title>
</head>
<body>

<h1>upload page</h1>

<form method="POST" action="insert">
      <label> brand </label><input type="text" name="brand"/><br />
      <input type="submit" value="Save brand"/>
    </form>

<a href="/">Index</a>

</body>
</html>

Я ожидаю, что мой обработчик вставит строковое значение в базу данных и напечатаетподтверждение в терминале.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...