правильный способ получения данных объекта в отдельном модуле - PullRequest
0 голосов
/ 13 сентября 2018

Я разрабатываю 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 работать 'пользователей', но либо я получаю 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

UPDATE: Если я помещаю 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 в качестве постоянной переменной в файле?

1 Ответ

0 голосов
/ 09 октября 2018

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

...