Это не определено в родительском конструкторе - slack botkit

Я пытаюсь заставить botkit настроить веб-сервер и вызвать функции, которые определены в другом файле. Но когда я запускаю код, я получаю сообщение об ошибке "Невозможно прочитать свойство" клиент "неопределенного" в botController.js.

//index.js

const Botkit = require('botkit');
const Strings = require('./utils/strings');
const Console = console;

require('dotenv').config();

const EventsController = require('./controllers/events.controller');
const BotController = require('./controllers/bot.controller');

if (
  !process.env.CLIENT_ID ||
  !process.env.CLIENT_SECRET ||
  !process.env.PORT ||
  !process.env.VERIFICATION_TOKEN
) {
  Console.log(
    'Error: Specify CLIENT_ID, CLIENT_SECRET, VERIFICATION_TOKEN and PORT in environment'
  );
  process.exit(1);
}


const botController = new BotController;

slackline.setupWebserver(process.env.PORT, botController.setupWebserver);

//bot.controller.js

const Botkit = require('botkit');
require('dotenv').config(); //not sure if need to be imported

let config = {
  json_file_store: '../db_slackbutton_slash_command/',
};


class BotController {
  constructor () {
    this.client = Botkit.slackbot(config).configureSlackApp({
      clientId: process.env.CLIENT_ID,
      clientSecret: process.env.CLIENT_SECRET,
      scopes: ['commands', 'channels:read'],
      redirectUri: 'https://cwbcn2.localtunnel.me/oauth',
    });
  }

  setupWebserver (err, webserver) {
    //error thrown here
    this.client.createWebhookEndpoints(this.client.webserver);

    this.client.createOauthEndpoints(this.client.webserver, function (
      err,
      req,
      res
    ) {
      if (err) {
        res.status(500).send('ERROR: ' + err);
      } else {
        res.send('Success!');
      }
    });
  }

}

module.exports = BotController;

Изначально весь мой код был в index.js, и он был настроен ботом просто отлично. Я хочу поместить обратные вызовы в отдельный файл контроллера, поэтому я создаю отдельный файл botController.js. Этот код изначально был в index.js.

const Botkit = require('botkit');
const Strings = require('./utils/strings');
const Console = console;

require('dotenv').config();

const EventsController = require('./controllers/events.controller');

if (
  !process.env.CLIENT_ID ||
  !process.env.CLIENT_SECRET ||
  !process.env.PORT ||
  !process.env.VERIFICATION_TOKEN
) {
  Console.log(
    'Error: Specify CLIENT_ID, CLIENT_SECRET, VERIFICATION_TOKEN and PORT in environment'
  );
  process.exit(1);
}

let config = {
  json_file_store: './db_slackbutton_slash_command/',
};


const slackline = Botkit.slackbot(config).configureSlackApp({
  clientId: process.env.CLIENT_ID,
  clientSecret: process.env.CLIENT_SECRET,
  scopes: ['commands', 'channels:read'],
  redirectUri: 'https://cwbcn2.localtunnel.me/oauth',
});

slackline.setupWebserver(process.env.PORT, function (err, webserver) {
  slackline.createWebhookEndpoints(slackline.webserver);

  slackline.createOauthEndpoints(slackline.webserver, function (
    err,
    req,
    res
  ) {
    if (err) {
      res.status(500).send('ERROR: ' + err);
    } else {
      res.send('Success!');
    }
  });
});

0 ответов

Другие вопросы по тегам