見出し画像

素人が2020年までの1ヶ月でLINE BOTに挑戦する毎日note. 【Day 22:Javascriptとnode.jsのインプット part 2 動かして学ぶ】

こんにちは!
12月1日から2019年残り1ヶ月でスケジュール調整BOTの開発に挑戦している"くろ"です。

BOTの概要:Day 2の記事

BOTの仕様:機能一覧やフローチャート Day 10の記事

昨日はJavascriptとnode.js(+Express)のインプットをしていきました。

今日はその続きをしていきながら、Day17で作ったサンプルコード(herokuにデプロイしているやつ)を解読しつつ、どうやってアプリケーションを作っていくのか?の土台作りをしてきます。

昨日に続きnodeの勉強をこちらのブログでしていきながら、サンプル解読しつつ、ちょっと変更してどこがどう動いているのか確かめながら学ぶという作業をしてきました。

解読しようとしているサンプルコードはこちら。

const express = require('express')
const path = require('path')
const PORT = process.env.PORT || 5000
const line = require("@line/bot-sdk");


const config = {
 channelAccessToken: process.env.ACCESS_TOKEN,
 channelSecret: process.env.SECRET_KEY
};
const client = new line.Client(config); // 追加


express()
 .use(express.static(path.join(__dirname, 'public')))
 .set('views', path.join(__dirname, 'views'))
 .set('view engine', 'ejs')
 .get('/', (req, res) => res.render('pages/index'))
 .get('/g/', (req, res) => res.json({method: "こんにちは、getさん"})) // 追加
 .post('/p/', (req, res) => res.json({method: "こんにちは、postさん"})) // 追加
 .post("/hook/", line.middleware(config), (req, res) => lineBot(req, res)) // 変更、middlewareを追加
 .listen(PORT, () => console.log(`Listening on ${ PORT }`))

 // 追加
function lineBot(req, res) {
 res.status(200).end(); //変更
 // ここから追加
 const events = req.body.events;
 const promises = [];
 for (let i = 0, l = events.length; i < l; i++) {
   const ev = events[i];
   promises.push(
     echoman(ev)
   );
 }
 Promise.all(promises).then(console.log("pass")); // 変更
}

// 追加
async function echoman(ev) {
 const pro =  await client.getProfile(ev.source.userId);
 return client.replyMessage(ev.replyToken, {
   type: "text",
   text: `${pro.displayName}さん、今「${ev.message.text}」って言いました?`
 })
}

おそらく明日もそうなると思うので、解読の模様を記載するのは明日に持ち越します。

以下メモ記事。

・この辺のコードがなんとなくわかる記事

express()
 .get('/', (req, res) => res.render('pages/index'))

画像1

Expressの最も基本的な所はこれを見ていきました。この辺かな。

const express = require('express')
const path = require('path')
const PORT = process.env.PORT || 5000

express()
 .use(express.static(path.join(__dirname, 'public')))
 .set('views', path.join(__dirname, 'views'))
 .set('view engine', 'ejs')
 .get('/', (req, res) => res.render('pages/index'))
 .get('/g/', (req, res) => res.json({method: "こんにちは、getさん"})) // 追加
 .post('/p/', (req, res) => res.json({method: "こんにちは、postさん"})) // 追加
 .post("/hook/", line.middleware(config), (req, res) => lineBot(req, res)) // 変更、middlewareを追加
 .listen(PORT, () => console.log(`Listening on ${ PORT }`))

・アロー関数

=> こういう記号なんやっけ?ってなった時はここ。

・LIFFってなんなのか?が最初の方に書いてあります。


以上になります。




よろしければサポートお願いします! 頂いたサポートはクリエイター活動に活用させて頂きます。