Правильный способ получения данных объекта в отдельном модуле

Я разрабатываю API, который также служит ботом для телеграмм. Мне нужно получить все telegram-user, чтобы их предупредить.

const TelegramBot = require('node-telegram-bot-api');
const express = require('express');
const router = express.Router();
const config = require('../config/production.json');
const TOKEN = config.bot.token;
const bot = new TelegramBot(TOKEN);

const app = require('./app.js');
const users = app.service('telegram-user');

router.post(`/${TOKEN}`, (req, res) => {
  bot.processUpdate(req.body);
  res.sendStatus(200);
});


bot.onText(/\/registrar/, async function onStartText(msg) {
  users.create({
    id: msg.chat.id,
    first_name: msg.chat.first_name
  }).catch(() => {
    bot.sendMessage(msg.chat.id, 'Usuario ya registrado');
  });
  bot.sendMessage(msg.chat.id, 'Registrado correctamente');
});

Я пробовал несколько способов заставить работать const 'users', но либо получаю undefined, либо app.service не является функцией.

Я также пробовал заменить require('.app.js') с помощью

const feathers = require('@feathersjs/feathers');
const express = require('@feathersjs/express');
const app = express(feathers());

если я запустил этот точный код в app.js, он сработает:

const users = app.service('telegram-user');
users.create({
    id: msg.chat.id,
    first_name: msg.chat.first_name
  })

Я использую перья с Sequelize и Postgresql

ОБНОВИТЬ: Если я помещаю require('.app.js') внутрь функции, он работает, но если я помещаю его в начало ошибки, я получаю «app.service не является функцией».

Это работает:

bot.onText(/\/registrar/, async function onStartText(msg) {
    const app = require('./app.js');  //require in here
    const users = app.service('telegram-user');
    users.create({
            id: msg.chat.id,
            first_name: msg.chat.first_name
    }).catch(() => {
            bot.sendMessage(msg.chat.id, 'Usuario ya registrado');
        });
    bot.sendMessage(msg.chat.id, 'Registrado correctamente');
});

Как я могу установить app как константную переменную в файле?

Как выглядит ваш app.js? Требование его в начале файла является довольно распространенной практикой и должно работать, если он правильно экспортирован.

Daff 14.09.2018 01:19

Вот он, довольно стандартный (сгенерирован с помощью перьев-cli) pastebin.com/DatbMiPK

Vallo 14.09.2018 13:35

Вот почему это кажется странным. Возможно, службы нет (users.create не является функцией), но я не могу придумать, как app.service не будет доступен в этом случае. Я впервые это вижу.

Daff 15.09.2018 07:23

правильно ли назначать app на const? у вас есть хоть какой-нибудь рабочий пример, который я могу проверить? Спасибо

Vallo 17.09.2018 16:44

Да, это так. перья-болтовня показывает, как это использовать, например в пользовательские сервисные тесты.

Daff 17.09.2018 19:13
0
5
60
1

Ответы 1

Проблема заключалась в том, что у меня была циклическая зависимость, из-за которой require('.app.js') возвращал пустой объект. Решением было переместить require, который загружал мой первый раздел кода, в нижнюю часть app.js, чтобы app был полностью запущен до того, как он будет загружен require('.app.js').

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