20201223のNode.jsに関する記事は4件です。

[Node.js] Node.jsを用いてMySQLにデータを登録する

Node.jsを用いてMySQLにデータを登録する

※ 自分用の覚え書きでございます。

Node.jsを用いてMySQLにデータを登録します。ローカル環境で実行しています。

MySQLに作成したテーブル

f_id , f_name , f_age という3つのフィールドを作成しました。

007a.png

Node.js側の記述

/ (localhostのルート) にアクセスしたとき、SELECT文を実行します。
/entry に post したとき、INSERT文を実行します。

app.js
const express = require('express');
const mysql = require('mysql');
const app = express();

app.use(express.urlencoded({extended: false}));

const connection = mysql.createConnection({
  host: 'localhost',
  user: '********',
  password: '********',
  database: 'db_users'
});

app.get('/', (req, res) => {
  connection.query(
    'SELECT * FROM tbl_users',
    (error, results) => {
      res.render('index.ejs', {items: results});
    }
  );
});

app.get('/entry', (req, res) => {
  res.render('entry.ejs');
});

app.post('/entry', (req, res) => {
  connection.query(
    'INSERT INTO tbl_users (f_name, f_age) VALUES (?, ?)',
    [req.body.userName, req.body.userAge],
    (error, results) => {
      res.redirect('/');
    }
  );
});

app.listen(3000);

localhostにアクセスしたときの画面表示 : index.ejs

index.ejs
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>db_users</title>
  </head>
  <body>
    <a href="/entry">+ 新規登録</a>
    <ul>
      <li>
        <span>ID</span>
        <span>名前</span>
        <span>年齢</span>
      </li>
    </ul>
    <ul>
      <% items.forEach((item) => { %>
        <li>
          <span><%= item.f_id %></span>
          <span><%= item.f_name %></span>
          <span><%= item.f_age %></span>
        </li>
      <% }) %>
    </ul>
  </body>
</html>

/entry の画面表示 : entry.ejs

entry.ejs
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>db_users</title>
  </head>
  <body>
    <form action="/entry" method="post">
      名前:<input type="text" name="userName">
      年齢:<input type="number" name="userAge">
      <input type="submit" value="登録">
    </form>
  </body>
</html>

ブラウザからデータを登録

・localhostにアクセスします。
 →いま、2人登録されています。

008a.png

・新規登録をクリックすると入力フォームが表示されます。
 →やまださぶろう さんを登録します。

009a.png

・登録をクリックすると入力されたデータが登録、表示されます。
 →やまださぶろう さんが登録されました。

010a.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Node.js バージョンアップのメモ

nuxtを立ち上げると以下のエラーが発生した。

Error: No valid exports main found for '/app/node_modules/colorette'

node.jsのバージョンが古いのが原因のようなので
バージョンアップをすることに。

以下、バージョンアップをした時のメモを書き残します。

1.現在のバージョンを確認

$ node -v
v13.2.0

2.現在の推奨バージョン or 最新バージョンをNode.jsで確認

もしくは、以下のコマンドでインストールできるバージョンを確認

$ nodebrew ls-remote
v0.0.1    v0.0.2    v0.0.3    v0.0.4    v0.0.5    v0.0.6

v0.1.0    v0.1.1    v0.1.2    v0.1.3    v0.1.4    v0.1.5    v0.1.6    v0.1.7
v0.1.8    v0.1.9    v0.1.10   v0.1.11   v0.1.12   v0.1.13   v0.1.14   v0.1.15
v0.1.16   v0.1.17   v0.1.18   v0.1.19   v0.1.20   v0.1.21   v0.1.22   v0.1.23
v0.1.24   v0.1.25   v0.1.26   v0.1.27   v0.1.28   v0.1.29   v0.1.30   v0.1.31
v0.1.32   v0.1.33   v0.1.90   v0.1.91   v0.1.92   v0.1.93   v0.1.94   v0.1.95
v0.1.96   v0.1.97   v0.1.98   v0.1.99   v0.1.100  v0.1.101  v0.1.102  v0.1.103
v0.1.104

v0.2.0    v0.2.1    v0.2.2    v0.2.3    v0.2.4    v0.2.5    v0.2.6

v0.3.0    v0.3.1    v0.3.2    v0.3.3    v0.3.4    v0.3.5    v0.3.6    v0.3.7
v0.3.8

v0.4.0    v0.4.1    v0.4.2    v0.4.3    v0.4.4    v0.4.5    v0.4.6    v0.4.7
v0.4.8    v0.4.9    v0.4.10   v0.4.11   v0.4.12

v0.5.0    v0.5.1    v0.5.2    v0.5.3    v0.5.4    v0.5.5    v0.5.6    v0.5.7
v0.5.8    v0.5.9    v0.5.10

v0.6.0    v0.6.1    v0.6.2    v0.6.3    v0.6.4    v0.6.5    v0.6.6    v0.6.7
v0.6.8    v0.6.9    v0.6.10   v0.6.11   v0.6.12   v0.6.13   v0.6.14   v0.6.15
v0.6.16   v0.6.17   v0.6.18   v0.6.19   v0.6.20   v0.6.21

v0.7.0    v0.7.1    v0.7.2    v0.7.3    v0.7.4    v0.7.5    v0.7.6    v0.7.7
v0.7.8    v0.7.9    v0.7.10   v0.7.11   v0.7.12

v0.8.0    v0.8.1    v0.8.2    v0.8.3    v0.8.4    v0.8.5    v0.8.6    v0.8.7
v0.8.8    v0.8.9    v0.8.10   v0.8.11   v0.8.12   v0.8.13   v0.8.14   v0.8.15
v0.8.16   v0.8.17   v0.8.18   v0.8.19   v0.8.20   v0.8.21   v0.8.22   v0.8.23
v0.8.24   v0.8.25   v0.8.26   v0.8.27   v0.8.28

v0.9.0    v0.9.1    v0.9.2    v0.9.3    v0.9.4    v0.9.5    v0.9.6    v0.9.7
v0.9.8    v0.9.9    v0.9.10   v0.9.11   v0.9.12

v0.10.0   v0.10.1   v0.10.2   v0.10.3   v0.10.4   v0.10.5   v0.10.6   v0.10.7
v0.10.8   v0.10.9   v0.10.10  v0.10.11  v0.10.12  v0.10.13  v0.10.14  v0.10.15
v0.10.16  v0.10.17  v0.10.18  v0.10.19  v0.10.20  v0.10.21  v0.10.22  v0.10.23
v0.10.24  v0.10.25  v0.10.26  v0.10.27  v0.10.28  v0.10.29  v0.10.30  v0.10.31
v0.10.32  v0.10.33  v0.10.34  v0.10.35  v0.10.36  v0.10.37  v0.10.38  v0.10.39
v0.10.40  v0.10.41  v0.10.42  v0.10.43  v0.10.44  v0.10.45  v0.10.46  v0.10.47
v0.10.48

v0.11.0   v0.11.1   v0.11.2   v0.11.3   v0.11.4   v0.11.5   v0.11.6   v0.11.7
v0.11.8   v0.11.9   v0.11.10  v0.11.11  v0.11.12  v0.11.13  v0.11.14  v0.11.15
v0.11.16

v0.12.0   v0.12.1   v0.12.2   v0.12.3   v0.12.4   v0.12.5   v0.12.6   v0.12.7
v0.12.8   v0.12.9   v0.12.10  v0.12.11  v0.12.12  v0.12.13  v0.12.14  v0.12.15
v0.12.16  v0.12.17  v0.12.18

v4.0.0    v4.1.0    v4.1.1    v4.1.2    v4.2.0    v4.2.1    v4.2.2    v4.2.3
v4.2.4    v4.2.5    v4.2.6    v4.3.0    v4.3.1    v4.3.2    v4.4.0    v4.4.1
v4.4.2    v4.4.3    v4.4.4    v4.4.5    v4.4.6    v4.4.7    v4.5.0    v4.6.0
v4.6.1    v4.6.2    v4.7.0    v4.7.1    v4.7.2    v4.7.3    v4.8.0    v4.8.1
v4.8.2    v4.8.3    v4.8.4    v4.8.5    v4.8.6    v4.8.7    v4.9.0    v4.9.1


v5.0.0    v5.1.0    v5.1.1    v5.2.0    v5.3.0    v5.4.0    v5.4.1    v5.5.0
v5.6.0    v5.7.0    v5.7.1    v5.8.0    v5.9.0    v5.9.1    v5.10.0   v5.10.1
v5.11.0   v5.11.1   v5.12.0

v6.0.0    v6.1.0    v6.2.0    v6.2.1    v6.2.2    v6.3.0    v6.3.1    v6.4.0
v6.5.0    v6.6.0    v6.7.0    v6.8.0    v6.8.1    v6.9.0    v6.9.1    v6.9.2
v6.9.3    v6.9.4    v6.9.5    v6.10.0   v6.10.1   v6.10.2   v6.10.3   v6.11.0
v6.11.1   v6.11.2   v6.11.3   v6.11.4   v6.11.5   v6.12.0   v6.12.1   v6.12.2
v6.12.3   v6.13.0   v6.13.1   v6.14.0   v6.14.1   v6.14.2   v6.14.3   v6.14.4
v6.15.0   v6.15.1   v6.16.0   v6.17.0   v6.17.1

v7.0.0    v7.1.0    v7.2.0    v7.2.1    v7.3.0    v7.4.0    v7.5.0    v7.6.0
v7.7.0    v7.7.1    v7.7.2    v7.7.3    v7.7.4    v7.8.0    v7.9.0    v7.10.0
v7.10.1

v8.0.0    v8.1.0    v8.1.1    v8.1.2    v8.1.3    v8.1.4    v8.2.0    v8.2.1
v8.3.0    v8.4.0    v8.5.0    v8.6.0    v8.7.0    v8.8.0    v8.8.1    v8.9.0
v8.9.1    v8.9.2    v8.9.3    v8.9.4    v8.10.0   v8.11.0   v8.11.1   v8.11.2
v8.11.3   v8.11.4   v8.12.0   v8.13.0   v8.14.0   v8.14.1   v8.15.0   v8.15.1
v8.16.0   v8.16.1   v8.16.2   v8.17.0

v9.0.0    v9.1.0    v9.2.0    v9.2.1    v9.3.0    v9.4.0    v9.5.0    v9.6.0
v9.6.1    v9.7.0    v9.7.1    v9.8.0    v9.9.0    v9.10.0   v9.10.1   v9.11.0
v9.11.1   v9.11.2

v10.0.0   v10.1.0   v10.2.0   v10.2.1   v10.3.0   v10.4.0   v10.4.1   v10.5.0
v10.6.0   v10.7.0   v10.8.0   v10.9.0   v10.10.0  v10.11.0  v10.12.0  v10.13.0
v10.14.0  v10.14.1  v10.14.2  v10.15.0  v10.15.1  v10.15.2  v10.15.3  v10.16.0
v10.16.1  v10.16.2  v10.16.3  v10.17.0  v10.18.0  v10.18.1  v10.19.0  v10.20.0
v10.20.1  v10.21.0  v10.22.0  v10.22.1  v10.23.0

v11.0.0   v11.1.0   v11.2.0   v11.3.0   v11.4.0   v11.5.0   v11.6.0   v11.7.0
v11.8.0   v11.9.0   v11.10.0  v11.10.1  v11.11.0  v11.12.0  v11.13.0  v11.14.0
v11.15.0

v12.0.0   v12.1.0   v12.2.0   v12.3.0   v12.3.1   v12.4.0   v12.5.0   v12.6.0
v12.7.0   v12.8.0   v12.8.1   v12.9.0   v12.9.1   v12.10.0  v12.11.0  v12.11.1
v12.12.0  v12.13.0  v12.13.1  v12.14.0  v12.14.1  v12.15.0  v12.16.0  v12.16.1
v12.16.2  v12.16.3  v12.17.0  v12.18.0  v12.18.1  v12.18.2  v12.18.3  v12.18.4
v12.19.0  v12.19.1  v12.20.0

v13.0.0   v13.0.1   v13.1.0   v13.2.0   v13.3.0   v13.4.0   v13.5.0   v13.6.0
v13.7.0   v13.8.0   v13.9.0   v13.10.0  v13.10.1  v13.11.0  v13.12.0  v13.13.0
v13.14.0

v14.0.0   v14.1.0   v14.2.0   v14.3.0   v14.4.0   v14.5.0   v14.6.0   v14.7.0
v14.8.0   v14.9.0   v14.10.0  v14.10.1  v14.11.0  v14.12.0  v14.13.0  v14.13.1
v14.14.0  v14.15.0  v14.15.1  v14.15.2  v14.15.3

v15.0.0   v15.0.1   v15.1.0   v15.2.0   v15.2.1   v15.3.0   v15.4.0   v15.5.0

3.インストールしたいバージョンを指定する

$ nodebrew install-binary v14.15.3
Fetching: https://nodejs.org/dist/v14.15.3/node-v14.15.3-darwin-x64.tar.gz
######################################################################## 100.0%
Installed successfully

4.使用するバージョンを指定する

$ nodebrew use v14.15.3
use v14.15.3

$ nodebrew ls
v14.10.0
v14.15.3

current: v14.15.3

5.nodeのバージョンが更新されていることを確認する

$ node -v
v14.15.3
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PayPay for Developersやってみた

PayPay for Developersやってみた

メリークリスマス!
今年はいい子にしていたので、サンタさんからPayPay送金があるかもしれない!
サンタさんから送金してもらうにはQRコードがなきゃダメだ!
そうだPayPay for DevelopersでQRコードを生成しよう!

ということで
2020年7月29日よりPayPay for Developersの提供スタートしたらしいので、キャッシュレス信者なので触ってみようと思いました。

ツールの選択

現時点(2020年12月)で、ツールが7つあるのですが、請求書の支払いのためのQRコードの印刷とあったので、動的ユーザスキャンというツールを使ってみます。

言語の選択

4つの言語でPayment SDKがあり、今回はNode.jsで動かして行きます。

実装

ドキュメントに書いてあるとおりなのですが。

npm i @paypayopa/paypayopa-sdk-node  

でNode.js用のPayment SDKをインストールし
今回はqr.jsを作成、その中に処理を書き

node qr.js  

で処理を走らせます。

まずはSDKで認証させる処理を書きます。

'use strict';

const PAYPAY = require('@paypayopa/paypayopa-sdk-node');
PAYPAY.Configure({
  clientId: 'API_KEY',
  clientSecret: 'API_SECRET',
  merchantId: 'MERCHANT_ID',
  productionMode: false,
});

API_KEYとAPI_SECRETとMERCHANT_IDは自身のアカウントのものに置き換えてください。
次に、QRコードを作成します。
先程の続きで色々なパラメーターでQRコードをリクエストします。

'use strict';
let payload = {
    merchantPaymentId: "my_payment_id",
    amount: {
      amount: 10000,
      currency: "JPY"
    },
    codeType: "ORDER_QR",
    orderDescription: "Mune's Favourite Cake",
    isAuthorization: false
  };

merchantPaymentIdは加盟店から提供された一意の支払い取引IDとあるのですが、同じものは使えない仕様です。
(QRコード生成ごとに、現状はテストなのでテスト時には適当な数字を入れました。)
amountは支払金額で高額設定したいところですね。
payloadの中にパラメーターを入れたら

PAYPAY.QRCodeCreate(payload, (response) => {
  console.log(response);
});

こちらの関数で返却された、値にurlが入っているのでそこにアクセスすると、QRコードが表示されます。
ちょっと改造してnpmのopenを入れ勝手にブラウザを開くように調整しました。

const open = require('open');
PAYPAY.QRCodeCreate(payload, (response) => {
  let body_arr = JSON.parse(response.BODY);
  if(body_arr.resultInfo.code === 'SUCCESS'){
    open(body_arr.data.url);
  }
});

開いたurlのQRコードはテストモードなので、普通に決済できません。

テストモードでのQRコード作成なので決済を試すにはアプリをサンドボックスアプリにし、テストユーザーでログインしてテストする必要があります。

https://paypay.ne.jp/developers-faq/sandbox_environment/post-43/

やってみて

今回はQRコードをとりあえず生成するところまでやったのですが、他にも実装しなきゃいけない機能がまだまだあるので、
個人ではアプリでマイコードを発行すればいいのでは?という考えは捨てて、
サンタさんにちゃんと送金してもらえるように実装していきたいと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

プログラミング初学者の現役医師が、firebase使って診断名を管理できるLINEBOTを実装してみた。

皆さん、ご自身の病名(医学的には診断名)を覚えていますか?

僕の本職は医師(開業医)です。
日常診療の課題感から、以下のような、『診断名を保管でき、かつ、必要に応じて引き出せる』アプリを実装しました。
動作は以下です。

医師として、月曜から土曜まで毎週700人以上の患者さまを診察させていただいております。
外来診療を行う中で、「多くの方がご自身の診断名を覚えていらっしゃらない」ことに課題感を持っていました。
診断名がわからないと、次の処置を行っても良いものか、非常に悩む瞬間があるからです。
でも例えば、「好酸球性多発血管炎性肉芽腫症」と診断されても、「飛影邪王炎殺黒龍波」(分かる人いるかな?)みたいに難しく、なかなか覚えられるものではありません。
そこで、上述の『診断名を保管でき、かつ、必要に応じて引き出せる』アプリを実装しました。
システム概要は以下です。
protooutstudio.001.jpeg
1-1 webappか診察券番号でIDを設定し病名の登録
1-2 webappで診察券番号で病名の確認
2-1 LINEBOTから診察券番号でIDを設定し病名の登録
2-2 LINEBOTで診察券番号で病名の確認
それぞれについて確認します。

下準備

必要なした準備は以下の2つ
① VScordのインストール
② firebaseの設定
上記はgoogle先生に譲ります。

Webappの実装

今回のwebappはvue.jsで実装します。

webappから病名の登録

UIは以下のようになります。
スクリーンショット 2020-12-23 7.36.27.png

addMydg.html
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>リアルタイムにデータ取得</title>
</head>

<body>
  <div id="app">
    <p>
      診察券番号:<input v-model="cardId" placeholder="00000000"><br>
      名前:<input v-model="name" placeholder="名前"><br>
      誕生日:<input type="date" v-model="birthday" placeholder="1900/1/1"><br>
      性別:<input v-model="gender" placeholder="男or女"><br>
      診断名:<input v-model="dgname" placeholder="診断名"><br>
      診断日:<input type="date" v-model="dgday" placeholder="1900/1/1"><br>
      <button v-on:click='post'>送信</button><br>
      <a href="https://unruffled-curran-e76f78.netlify.app/searchmydg">登録確認のために診断名検索ページに移動する</a>
    </p>
  </div>

  <script src="https://unpkg.com/vue"></script>
  <script src="https://www.gstatic.com/firebasejs/7.2.3/firebase-app.js"></script>
  <script src="https://www.gstatic.com/firebasejs/7.2.3/firebase-firestore.js"></script>
  <script>
    // firebaseの設定から下記を記入
    const firebaseConfig = {
    apiKey: "",
    authDomain: "",
    projectId: "",
    storageBucket: "",
    messagingSenderId: "",
    appId: "",
    measurementId: ""
    };
    // Initialize Firebase
    firebase.initializeApp(firebaseConfig);
    const db = firebase.firestore();
    let patient = '';
    let patientId = '';

    const app = new Vue({
      el: '#app',
      data: {
        allData: [],
        cardId:'',
        name: '',
        birthday: '',
        gender: '',
        dgname: '',
        dgday: '',
      },
      methods: {
        //データ追加
        post: async function () {
          patient = this.cardId
          const res = await db.collection("medicalRecord1").doc(patient).set({
            name: this.name,
            birthday: this.birthday,
            gender: this.gender,
            diagnosis: {dgday:this.dgday, dgname:this.dgname},
            cardId:this.cardId
          });
          console.log(patient);
      },
      }
    })
  </script>

</body>

</html>

webappで病名の確認

UIは以下のようになります。
スクリーンショット 2020-12-23 7.41.57.png

search.html
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>診断名検索</title>
</head>

<body>
  <div id="app">
    <h1>診断名検索</h1>
    <input v-model:value="cardID" placeholder="診察券番号"><br>
    診察券番号:{{ cardID }}
    <button v-on:click="searchDg">検索</button><br>
    <p>
    氏名:{{ name }}<br>
    診断名:{{ diagnosis }}<br>
    診断日:{{ diagnosisday }}
  </p>
    <button v-on:click="clearAll">全てをクリア</button><br>
    <a href="https://mystifying-tesla-bb64e7.netlify.app/addmydg">診断名登録ページに移動する</a>
  </div>

  <script src="https://unpkg.com/vue"></script>
  <script src="https://www.gstatic.com/firebasejs/7.2.3/firebase-app.js"></script>
  <script src="https://www.gstatic.com/firebasejs/7.2.3/firebase-firestore.js"></script>

  <script>
    // firebaseの設定から下記を記入
    const firebaseConfig = {
    apiKey: "",
    authDomain: "",
    projectId: "",
    storageBucket: "",
    messagingSenderId: "",
    appId: "",
    measurementId: ""
    };
    // Initialize Firebase
    firebase.initializeApp(firebaseConfig);
    const db = firebase.firestore();

    const app = new Vue({
    el: '#app', // Vueが管理する一番外側のDOM要素
    data: {
      // Vue内部で使いたい変数は全てこの中に定義する
      cardID:'',
      name:'',
      diagnosis: '',
      diagnosisday:'',
    },
    methods: {
      // 関数はここに記入
      searchDg: async function() {
        console.log('次の診察券番号の患者さまが検索されました:', this.cardID);
        const patientData = await db.collection("medicalRecord1").doc(this.cardID).get();
        console.log(patientData.date);
          //データの格納
        const pData = patientData.data();//繰り返し各箇所なので一回定数に
      this.name = pData.name;
      this.diagnosis = pData.diagnosis.dgname;
         this.diagnosisday = pData.diagnosis.dgday;
      },
      clearAll: function() {
       this.cardID = '';
       this.name = '';
       this.diagnosis = '';
       this.diagnosisday = '';
      console.log('全てのToDoが消去されました');
    },
    },
});
  </script>
</body>
</html>

LINEBotから病名の登録
リッチメニューを設定し、病名登録のwebappがLINEの中で立ち上がるように設定しました。
同様に、病名確認のwebappも立ち上がるように設定しました。

LINEBotで病名の確認
診断名を確認する場合、“診断名確認”とLINEBotに送ると、“診察券番号を教えてください”と返信させ、診察券番号を送ると名前・診断名・診断日を返すように設定しました。

まずは、必要なパッケージの導入
以下のコードを順番にターミナルに入力

ターミナルコマンド
$ npm init -y
ターミナルコマンド
$ npm i express
ターミナルコマンド
$ npm i @line/bot-sdk
ターミナルコマンド
$ npm i firebase

今回作成したコードは以下の通り。

searchMydg.js
'use strict'; 

// ########################################
//               初期設定など
// ########################################

// パッケージを使用します
const express = require('express');
const line = require('@line/bot-sdk');
const firebase = require("firebase/app");
require("firebase/firestore");

// firebaseの設定から下記を記入
const firebaseConfig = {
    apiKey: "",
    authDomain: "",
    projectId: "",
    storageBucket: "",
    messagingSenderId: "",
    appId: "",
    measurementId: ""
    };
// Initialize Firebase
firebase.initializeApp(firebaseConfig);
const db = firebase.firestore();

// ローカル(自分のPC)でサーバーを公開するときのポート番号です
const PORT = process.env.PORT || 3000;

// Messaging APIの設定から記入
const config = {
    channelSecret: '',
    channelAccessToken: ''
};

// ########################################
//  LINEサーバーからのWebhookデータを処理する部分
// ########################################

// LINE SDKを初期化します
const client = new line.Client(config);

// LINEサーバーからWebhookがあると「サーバー部分」から以下の "handleEvent" という関数が呼び出されます
async function handleEvent(event) {
    // 受信したWebhookが「テキストメッセージ以外」であればnullを返すことで無視します
    if (event.type !== 'message' || event.message.type !== 'text') {
        return Promise.resolve(null);
    }
    //診断名検索というテキストを受け取ったら診察券番号を確認するリプライを出す
    if (event.message.text == '診断名確認') {
        return client.replyMessage(event.replyToken, {
        type: 'text',
        text: '診察番号を入力してください'
    });
    }
    //cardIDの中に審査券番号が格納
    const cardID = event.message.text;
    console.log(cardID);

    //診察券番号からfirebase上の診断名を検索
    const patientData = await db.collection('medicalRecord1').doc(cardID).get();
    console.log(patientData.data());
    const pData = patientData.data();
    if (pData != undefined) {
        const name = pData.name;
        const diagnosis = pData.diagnosis.dgname;
        const diagnosisDay = pData.diagnosis.dgday;
        let msg = '';
        msg = 'お名前:'+ name +  '\n' +'診断名:' + diagnosis +  '\n' +'診断日:' + diagnosisDay
        console.log(msg);
        const message = {
            type: 'text',
            text: msg
        };
        client.replyMessage(event.replyToken, message);
    }else{
        const message = {
            type: 'text',
            text: '再度診察券番号を記入してください。'
        };
        client.replyMessage(event.replyToken, message);
    };
}


// ########################################
//          Expressによるサーバー部分
// ########################################

// expressを初期化します
const app = express();

// HTTP GETによって '/' のパスにアクセスがあったときに 'Hello LINE BOT! (HTTP GET)' と返事します
// これはMessaging APIとは関係のない確認用のものです
app.get('/', (req, res) => res.send('Hello LINE BOT! (HTTP GET)'));

// HTTP POSTによって '/webhook' のパスにアクセスがあったら、POSTされた内容に応じて様々な処理をします
app.post('/webhook', line.middleware(config), (req, res) => {
    // Webhookの中身を確認用にターミナルに表示します
    console.log(req.body.events);

    // 空っぽの場合、検証ボタンをクリックしたときに飛んできた"接続確認"用
    // 削除しても問題ありません
    if (req.body.events.length == 0) {
        res.send('Hello LINE BOT! (HTTP POST)'); // LINEサーバーに返答します
        console.log('検証イベントを受信しました!'); // ターミナルに表示します
        return; // これより下は実行されません
    }

    // あらかじめ宣言しておいた "handleEvent" 関数にWebhookの中身を渡して処理してもらい、
    // 関数から戻ってきたデータをそのままLINEサーバーに「レスポンス」として返します
    Promise.all(req.body.events.map(handleEvent)).then((result) => res.json(result));
});

// 最初に決めたポート番号でサーバーをPC内だけに公開します
// (環境によってはローカルネットワーク内にも公開されます)
app.listen(PORT);
console.log(`ポート${PORT}番でExpressサーバーを実行中です…`);

今後の課題

診断名を一つではないので、診断名をリスト化し、LINEBotに返せる設定を実装したいと思いました。
もう少し深めて行く予定です。

その他の記事

近すぎると小池都知事が『密です。』と連呼するデバイスを作ったら腹筋が崩壊したので、皆さんにも試して欲しい。

誰が使うかわからないけど、膝のレントゲン写真を送ったら、その膝がどの程度痛んでいるのか教えてくれるラインbotを作ってみた。

猪木の名言で元気をくれるbotを作ったら、想定外の応答で笑いが止まらなくなったから、ぜひ試して欲しい。

twitterが使えないというIntegromatの弱点を克服し、最強化する方法を書くので試して欲しい。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む