如何组合 node.js 应用程序的两个不同逻辑部分? (电报机器人和 http 服务器)

How to combine two different logic parts of node.js application? (telegram-bot and http-server)

这是我的第一个 node.js 真正的应用程序。我从使用特殊框架 Node-Telegram-Bot-Api

创建电报机器人开始

此机器人处理一系列问题,如姓名、phone、位置和照片、音频消息,将文件保存到服务器并将所有这些员工加入一个对象并将其写入 MongoDB .

这只是文件 index.js,我在其中完成了所有操作...

现在我面临新任务 - 为这些数据创建网络界面。我安装了 express-generator 并用它创建了站点,准备好使用 handlebar 视图,一些路线,sass 支持和服务静态文件 - 所有用于制作网络界面的有用的东西......

问题是 - 如何合并两个部分:

  1. telegram-bot 部分,用数据和

  2. 填充数据库
  3. express http-server,支持路由,查看和显示来自数据库的数据,还提供文件:照片和语音消息...

如果这个问题很愚蠢,我很抱歉。但这是我在node.js的第一部真正的作品,请理解我。

由于您只需要使用Express与数据库中的数据进行交互,您有以下选择:

  1. 公开一个 API 允许任何客户端检索数据。客户端可以是移动应用程序、其他服务或 Web 应用程序。
  2. 创建一个传统的 Express 应用程序(就像您使用 express-generator 所做的那样),从数据库中检索数据并将其与视图一起传递。

(1) 的一个简单粗暴的例子看起来像(省略了错误处理):

const express = require('express')
const mysql = require('mysql')

const app = express()
const router = express.Router()
const connection = mysql.createConnection({ /* ... */ })
connection.connect()

app.use(express.urlencoded({ extended: true }))
app.use(express.json())

router.get('/', async (req, res) => {
  const results = await new Promise((resolve, reject) => {
    connection.query('SELECT * FROM messages', (error, results) => {
      if (error) {
        reject(error)
        return
      }
      resolve(results)
    })
  })

  res.json(results)
})

app.use('/messages', router)
app.listen(process.env.PORT)

对于 (2),它基本上是相同的,除了你会调用:

res.render('viewName', results)

您的 Express 应用程序和电报机器人将彼此独立。