前提
Reactからname,ageの情報を"/users_new"でリクエストを飛ばし、Goにデータを送信しMySQLのusersテーブルにデータを保存したいが、ageの型が違うのでMySQLにデータを保存できないので解決したい
Number(data.age)を使うことでnumber型に変化させデータベースに保存できたがこれ以外の方法ありますでしょうか?
実現したいこと
ここに実現したいことを箇条書きで書いてください。
- React側からPostした際にageカラムをnumber型に変えた
- MySQLにデータを保存したい
発生している問題・エラーメッセージ
MySQLのageカラムが空のままになっている
(一旦保存処理を実現したいのでnull false制約はかけてません)
該当のソースコード
React 保存処理 const onSubmit = async (data: UserForm) => { Number(data.age); await axios.post(`http://localhost:8080/users_new`, data).then( function (response) { console.log(response); }, function (error) { console.log(error); } ); console.log(data); }; return ( <> <h3>フォーム送信</h3> <Controller control={control} name="name" render={({ field }) => ( <> <FormControl> <FormLabel>名前</FormLabel> <Input {...field} /> </FormControl> </> )} /> <Controller control={control} name="age" render={({ field }) => ( <> <FormControl> <FormLabel>年齢</FormLabel> <Input {...field} /> </FormControl> </> )} /> <Button onClick={handleSubmit(onSubmit)}>登録</Button>
型定義 export interface UserType { id: number; name: string; age: number; } export type UserForm = Pick<UserType, "name" | "age">;
Go MySQLに保存処理 func (a *application) PostUser(w http.ResponseWriter, r *http.Request) { var user UserNew json.NewDecoder(r.Body).Decode(&user) name := user.NAME age := user.AGE db := database.Connect() defer db.Close() stmt, err := db.Prepare("INSERT INTO users(name, age) VALUES(?,?)") if err != nil { log.Fatal(err) } res, _ := stmt.Exec(name, age) fmt.Println(res) }
データベース接続処理 package database import ( "database/sql" "errors" "fmt" "log" _ "github.com/go-sql-driver/mysql" ) type User struct { ID int FirstName string LastName string Age string } type Tweet struct { ID int } func Connect() *sql.DB { user := "webuser" password := "webpass" host := "localhost" port := "3307" database_name := "go_mysql8_development" dbconf := user + ":" + password + "@tcp(" + host + ":" + port + ")/" + database_name + "?charset=utf8mb4" db, err := sql.Open("mysql", dbconf) if err != nil { fmt.Println(err.Error()) } return db }
試したこと
- React側で Number(data.age)で数値型変換
- Go側で数値型変換
age, err := strconv.Atoi(age) if err != nil { // handle the error } をするとageはすでにint型に設定されているから変換できない?
すみませんご指導お願い致しますm(_ _)m