@p8080q

Как надстроить общение между классами REST API?

Привет. Я новичок в js, уже 2 дня не могу найти ответ.
Есть два контроллера. Как в одном контроллере обратится к другому и получить нормальный ответ?
Первый:
class categoryController {
    async activ(req, res) {
        db.query(
            `SELECT * FROM chat_cat WHERE chat_id = ?`,
            [req.query.id],
            (err, data) => {
                if (err) return res.json(err)
                return res.json(data)
            })
    }
}

Второй обращаюсь к первому
async groupQuestionIdd(req, res) {
        // const menu = await menuController.main()
        const category = await categoryController.activ(req, (err, data) => {
            if (err) return res.json(err)
            return res.json(data)
        })
        // const categor2 = await fetch(`http://localhost:3000/api/category/groupActiv?id=${req.query.id}`)
        // const resaCategory = await category.json();
        // const resaCategory2 = await category2.json();
        // console.log(resaCategory)
        // console.log(resaCategory2)
        // console.log(menu)
        
        return res.json('data')
    }


Уже по всякому пробовал, получается только через fetch, но это же бред
(В комментах как пробовал, на фото постоянная ошибка)65671bd195b3e009852391.png

Подскажите, пожалуйста, хотя бы где копать
  • Вопрос задан
  • 122 просмотра
Пригласить эксперта
Ответы на вопрос 1
@waterstream_ig
Fullstack developer
Добрый день.
Начну с того, что контроллеры Rest Api одного приложения не должны между собой общаться. У них одно предназначение: предоставить внешним системам интерфейс сервиса через http запросы. Судя по первому контроллеру вы обращаетесь к БД за данными. Поэтому, непосредственная работа с данными должна выполняться отдельным сервисом. А вот уже этот сервис должны использовать rest-контроллеры. Структура в простом виде выглядит так: абстрактный интерфейс - реализация интерфейса - rest контроллер для внешних систем.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы