TypeError: resolver не является функцией - PullRequest
0 голосов
/ 15 февраля 2020

Я пытаюсь создать базовую запись c по клику в моем приложении Next JS для базы данных MongoDB. Вопрос, который я получаю, TypeError: resolver is not a function. Я понимаю, что это может быть проблемой синхронности, но я не могу понять, где.

Используемый стек: следующий JS, топор ios, пн goose.

Фрагмент кода компонента, вызывающий ax ios:

Я знаю, что состояния обновляются, поэтому я помещаю только фрагмент, который обрабатывает запрос

  handleSubmit = async (e: any) => {
    e.preventDefault();

    await axios
      .post('/api/roomSession', {
        roomName: this.state.roomName,
        teamName: this.state.teamName
      })
      .then((response: any) => console.log('axios call reached', response))
      .catch((error: any) => console.log('---- error! ----', error));
  };

[...]
<button onClick={this.handleSubmit}>Create</button>
[...]

Далее JS Файл API:

import { newSession } from '../../packages/backend/mongo/connection';

const apiNewSession = async (roomName, teamName) => {
  await newSession(teamName, roomName);
};

export default apiNewSession();

Пн goose Файл:

const mongoose = require('mongoose');

mongoose
  .connect(
    'mongodbconnection',
    { useNewUrlParser: true, useUnifiedTopology: true }
  )
  .then(() => {
    console.log('connected to mongoDB');
  })
  .catch(err => console.error('Connection failed: ', err));

  const sessionSchema = new mongoose.Schema({
    teamName: String,
    roomName: String
  });

const Session = mongoose.model.tests || mongoose.model('tests', sessionSchema);

export const newSession = async (teamName, roomName) => {
  const session = new Session({
    teamName,
    roomName
  });
  const result = await session.save();
  mongoose.connection.close();
};

Некоторая дополнительная информация о странном поведении: при первом вызове код выдает вышеупомянутую ошибку но удается установить соединение с mongoDB и создает запись EMPTY внутри коллекции (только _id и _v). При второй попытке выдается только ошибка.

1 Ответ

0 голосов
/ 16 февраля 2020

Как обычно, ответ прост после того, как вы об этом думаете.

Я неправильно экспортировал функцию из файла API Next JS.

Правильный метод: export default apiNewSession;

Не знаю, почему это все-таки произошло, когда я экспортировал функцию по умолчанию.

В любом случае, я оставлю этот вопрос открытым еще на неделю. Если кто-то может придумать улучшения кода или рефакторинга, я дам ему решить. (я не люблю отдавать это себе, чувствует себя ненадежно)

...