Как получить данные из обработчика API из другого обработчика API в Next js? - PullRequest
1 голос
/ 13 апреля 2020

Используя Next js, я борюсь за выборку данных из обработчика API в другом обработчике API. Обработчик /api/batch.js извлекает некоторые данные из MongoDB: обработчик

import middleware from '../../libs/mongodb';
import nextConnect from 'next-connect';

const handler = nextConnect();
handler.use(middleware);
handler.get(async (req, res) => {
  const {batch_uuid} = req.query
  const batch_stats = await req.db.collection('stats').find({
    'batch.uuid': uuid
  }).toArray()
  res.json(batch_stats)  
})
export default (req, res) => handler.apply(req, res)

/api/stats.js извлекает некоторые данные из MySQL и, основываясь на этом и на данных из Mon go, создает полезную нагрузку.

Грязное исправление работает, как показано ниже в stats.js:

const response = await fetch('http://localhost:3000/api/batch?uuid=1234')
const data = await response.json()
// use data and build another payload

Однако для этого требуется выполнить вызов http, и нет смысла делать это для внутренней конечной точки. Я попытался напрямую вызвать обработчик batch, но получил undefined

const getBatch = require('./batch');
module.exports = async (req, res) => {
   const accounts = await getBatch()
   res.status(200).json({accounts})
}

Чего мне не хватает?

1 Ответ

1 голос
/ 14 апреля 2020

Вы можете извлечь данные из базы данных в отдельный модуль и импортировать этот модуль в оба обработчика API. Вместо того чтобы одна конечная точка API отправляла запрос другой конечной точке API, обработчики API просто использовали бы тот же модуль, который извлекает данные из MongoDB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...