前提・実現したいこと
Angularの練習として、フォームにあるボタンを押すと打刻できるアプリを作成しております。
もともと、JS + ExpressでMySQLのテーブルから情報を取得するものを作成していたので、通信部分はそれを流用しようと考えております。
MySQLのユーザー情報がいれてあるテーブルから名前を取得しフォームのセレクトボックスに反映。名前を選択しボタンを押すと、MySQL側の別テーブルに選択した名前とボタン押下時の時刻をインサートしたいと思っております。
発生している問題・エラーメッセージ
色々と調べてはいるのですがHTTPClientModuleを用いてどのようにMySQL側から取得した情報をもとに、クリックイベントを動かせばよいのか分からず詰まっております。
どのように記述したらよいのか分からず教えて頂けたら幸いです。
該当のソースコード
######フォーム
HTML
1<form class="form"> 2 <div> 3 <label class="form-name">名前</label> 4 <select id="select_name" name="input_name" class="form-selectbox"> 5 <option value="test">TEST</option> 6 </select> 7 <label><span class="form-id">ID</span><input id="select_id" name="input_id" class="form-label"></label> 8 <label><span class="form-mail">メールアドレス</span><input id="select_mail" name="input_mail" class="form-label"></label> 9 </div> 10 <div class="form-button"> 11 <button class="btn" id="begin" name="begin_button" type="submit" value="current_time" (click)="begin_click()">打刻</button> 12 </div> 13</form>
ts
1import { Component, OnInit } from '@angular/core'; 2 3@Component({ 4 selector: 'app-form', 5 templateUrl: './form.component.html', 6 styleUrls: ['./form.component.css'] 7}) 8export class FormComponent implements OnInit { 9 10 begin_click() :void { 11 console.log('test'); 12 } 13 14 constructor() { } 15 16 ngOnInit(): void { 17 } 18 19}
######Express
javascript
1const express = require("express"); 2const app = express(); 3const bodyParser = require("body-parser"); 4const dateutils = require("date-utils"); 5const util = require("util"); 6 7app.use(express.static("css")); 8app.use(bodyParser.urlencoded({ extended: true })); 9app.use(bodyParser.json()); 10 11/* 12 * usersは、ユーザー情報テーブル 13 * dakokuは、打刻情報テーブル 14 */ 15app.get("/", async (req, res) => { 16 let users_sql = "select * from users"; 17 let dakoku_sql = "select * from dakoku"; 18 let data_users = await queryAsync(users_sql); 19 let data_dakoku = await queryAsync(dakoku_sql); 20 res.json(data_dakoku, data_users); 21}); 22 23app.post("/", async (req, res) => { 24 var dt = new Date; 25 var now = dt.toFormat("HH24:MI:SS"); 26 var today = dt.toFormat("YYYY年MM月DD日"); 27 28 console.log("request", req.body.input_name); 29 30 const resid = await queryAsync("select max(id) from dakoku"); 31 const preid = resid[0]["max(id)"]; 32 const id = preid + 1; 33 34 35 /*打刻日を取得*/ 36 let sql_lastdate = "select max(date) from attendance where name = ? "; 37 var lastdate = await queryAsync(sql_lastdate, req.body.input_name); 38 lastdate = lastdate[0]["max(date)"]; 39 40 41 /*ボタンクリック*/ 42 if(req.body.begin_button){ 43 let sql = "INSERT INTO attendance SET ?"; 44 45 var results = await queryAsync(sql, { id: id, name: req.body.input_name, mail: req.body.input_mail, date: today, pushtime: now}); 46 console.log("打刻"); 47 48 res.json("/"); 49 }; 50 51 52/*MySQL*/ 53app.listen(3000); 54 55const mysql = require("mysql"); 56 57const con = mysql.createConnection({ 58 host: "localhost", 59 user: 'root', 60 password: "pass", 61 database: "test_db", 62}); 63const queryAsync = util.promisify(con.query).bind(con); 64 65con.connect(function (err) { 66 if (err) throw err; 67 console.log("Connected"); 68});
MySQL
1テーブル名:dakoku 2+----+-----------+--------------------+----------+----------+ 3| id | name | email | date | pushtime | 4+----+-----------+--------------------+----------+----------+ 5 6テーブル名:users 7+----+-----------+--------------------+ 8| id | name | email | 9+----+-----------+--------------------+ 10| 1 | user1 | user1@test.com | 11+----+-----------+--------------------+ 12| 2 | user2 | user2@test.com | 13+----+-----------+--------------------+ 14| 3 | user3 | user3@test.com | 15+----+-----------+--------------------+ 16
補足情報(FW/ツールのバージョンなど)
angular cli v9.1.8
rxjs 6.5.5
typescript 3.8.3
webpack 4.42.0
MySQL v5.7.30
Node v12.16.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/29 07:51
2020/06/29 08:09 編集