我正在开发一个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'工作的方法,但是我不确定或者app.service不是函数。
我还尝试过用{p>更改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中使用feathersjs
更新:
如果我将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
设置为const变量?
答案 0 :(得分:0)
问题是我有一个循环依赖性,使得require('.app.js')
返回一个空对象。解决方案是将已加载第一个代码段的require
移动到app.js
的底部,以便在app
加载require('.app.js')
之前完全启动 var linkExtent = d3.extent(energy.links, function (d) {return d.value});
var frequencyScale = d3.scale.linear().domain(linkExtent).range([0.05,1]);
var particleSize = d3.scale.linear().domain(linkExtent).range([1,5]);
energy.links.forEach(function (link) {
link.freq = frequencyScale(link.value);
link.particleSize = 2.5;
link.particleColor = d3.scale.linear().domain([0,1])
.range([link.source.color, link.target.color]);
})