Ошибка: "UnhandledPromiseRejectionWarning: TypeError: response.json is not a function"

Пытаюсь получить данные с БД:

export async function Otdel() {
    try {
        const cards = await sequelize.query(
            'select * from sta_otdel',
            {
                type: QueryTypes.SELECT,
            },
        );

        if (!cards) {
            return { success: false, error: ErrorCode.notFound };
        }

        return {
            success: true,
            content: cards,
        };
    } catch (error) {
        console.log(error.message);
        return { success: false, error: ErrorCode.unexpectedError };
    }
}


async function tableDocuments(response: Response) {
  const data = await incomingService.tableDocuments.Otdel()
  return response.json(data)
}

На клиенте получаю с помощью axios:

const response = await axios.get(`/incoming/tableDocuments`, {
      headers: { authorization: "Bearer " + User.token },
      cancelToken: tableDocumentsCancelToken.token,
    })

    if (response.data?.success) {
      return {
        type: "ok",
        content: response.data.content,
        info: response.data.info,
      }
    }

Почему возникает эта ошибка?


Ответы (1 шт):

Автор решения: nörbörnën

Обработчик запроса express принимает 3 параметра: request, response и next function.

В вашем обработчике, функция tableDocuments, принимается первый параметр (request) и используется как второй параметр (response). Это не правильно так как порядок аргументов функции должен быт соблюден!

Судя по коду, ваше приложение написано на , вот краткий пример правильного обработчика:

import * as express from 'express';

// Router
const router = express.Router();
const tableDocuments: express.RequestHandler = async (_, res, next) => {
  try {
    const data = {ok: true};
    return res.json(data);
  } catch (err) {
    return next(err);
  }
};
router.get('/', tableDocuments);

// Application
const app = express();

app.use('/tableDocuments', router);

app.listen(3002, 'localhost');

Проверено на node.js v15.0.1, typescript v4.0.5

→ Ссылка