質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.62%

  • Node.js

    1791questions

    Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

  • Express

    230questions

    ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

  • Slack

    175questions

    Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

[Node.js / Express]slackbotでpostしたメッセージを#generalへ送信

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 594

ch4nk0_

score 5

前提・実現したいこと

slackbotを用いてpostした内容を#generalへ送信する
(slackbotsのモジュールを使うこと前提)

家計簿のアプリだが、内容と値段をPOSTする
下記コードに置いてslackbot以外についてのエラーはないです

発生している問題

Node.jsの非同期処理が抜けれないためslackが呟き続けることを回避したい

該当のソースコード

var express =require('express');
var router =express.Router();
var moment = require('moment');
var connection = require('../mysqlConnection');
var SlackBot = require('slackbots');
var bot = new SlackBot({
    token:'トークン',
    name:'Manager'
});

router.get('/:board_id',function(req,res,next){
//略
});

router.post('/:board_id',function(req,res,next){
  var count=0;
  var content=req.body.content;
  var howmach=req.body.howmach;
  var createdAt = moment().format('YYYY-MM-DD HH:mm:ss');
  var boardId=req.params.board_id;
  var query = 'INSERT INTO pieces (content,howmach,board_id,created_at) VALUES ("'+content+'",'+'"'+howmach+'",'+'"'+boardId+'",'+'"'+createdAt+'")';
  connection.query(query,function(err,rows){
     res.redirect('/boards/'+boardId);
  });
  bot.on('message', function(message) {
    var params = {
        icon_emoji: ':cat:'
    };
    bot.postMessageToChannel('general', '内容:'+content+',値段:'+howmach, params);
    console.log('test');
   //実行すると上2行が永遠ループ
  });
});

module.exports=router;

試したこと

bot.on('start')では送信できなかった
next();をconsole.log('text')の下に置いても反応なし...

補足情報

https://www.npmjs.com/package/slackbots 参照

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

bot.postMessageToChannel()の呼び出しを、bot.on('message') のイベントハンドラ内で呼び出しているため、postMessageToChannel()→'message'イベンド→postMessageToChannel()→'message'イベンド→・・・という永久ループになっているのでは。

下記のように修正すれば、期待する動作になるのではないでしょうか。

router.post('/:board_id',function(req,res,next){
  var count=0;
  var content=req.body.content;
  var howmach=req.body.howmach;
  var createdAt = moment().format('YYYY-MM-DD HH:mm:ss');
  var boardId=req.params.board_id;
  var query = 'INSERT INTO pieces (content,howmach,board_id,created_at) VALUES ("'+content+'",'+'"'+howmach+'",'+'"'+boardId+'",'+'"'+createdAt+'")';
  connection.query(query,function(err,rows){
     res.redirect('/boards/'+boardId);
  });
  var params = {
      icon_emoji: ':cat:'
  };
  bot.postMessageToChannel('general', '内容:'+content+',値段:'+howmach, params);
  console.log('test');
});


ご参考になれば。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/19 13:43

    解決しました!ありがとうございます!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Node.js

    1791questions

    Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

  • Express

    230questions

    ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

  • Slack

    175questions

    Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。