Попробуйте сделать так ... (эта запись немного длинная, но если вы следуете логике c и порядку импорта, она должна работать):
Пример структуры проекта:
├── .next
|
├── database
| └── index.js
|
├── models
| ├── all.js
| ├── index.js
| └── teams.js
|
├── src
| └── pages
| ├── api
| | └── teams
| | └── names.js
| └── index.js
|
└── next.config.json
база данных / индекс. js - это устанавливает sh соединение с mon go базой данных с использованием mon goose
const bluebird = require("bluebird");
const mongoose = require("mongoose");
// I use process.env.DATABASE as a flexible database name
// this can be set in an ".env" file or in your package.json scripts...
// like "dev" : "DATABASE=example-dev next dev"
const { DATABASE } = process.env;
const options = {
useNewUrlParser: true, // avoids DeprecationWarning: current URL string parser is deprecated
useCreateIndex: true, // avoids DeprecationWarning: collection.ensureIndex is deprecated.
useFindAndModify: false, // avoids DeprecationWarning: collection.findAndModify is deprecated.
useUnifiedTopology: true, // avoids DeprecationWarning: current Server Discovery and Monitoring engine is deprecated
};
// connects to a mongodb database
mongoose.connect(`mongodb://localhost/${DATABASE}`, options);
// uses bluebird for mongoose promises
mongoose.Promise = bluebird;
моделей / все. js - для этого потребуется всех моделей быть зарегистрированным к базе данных подключение
require("./team");
require("./user");
...etc
модели / индекс. js - это будет экспорт mon goose модель экземпляры (вам не нужен этот файл, так как вы можете просто импортировать mongoose
и извлечь model(Team)
из файла, но я хотел бы уменьшить количество повторяющихся импортов )
const { model } = require("mongoose");
module.exports = {
Team: model("Team"),
User: model("User"),
...etc
};
моделей / команд. js - это будет устанавливаем sh схему как мон goose модель
const { Schema, model } = require("mongoose");
const teamSchema = new Schema({
league: { type: String, required: true },
team: { type: String, unique: true },
name: { type: String, unique: true, lowercase: true },
});
module.exports = model("Team", teamSchema);
страницы / API / команды / все. js - импортировать модель * 105 4 * экземпляр изнутри маршрута API ...
import { Team } from "../../../models"; (index.js)
// alternatively:
// import { model } from "mongoose";
// cost Team = model("Team");
/**
* Retrieves all teams names.
*
* @function getAllTeamNames
* @returns {object} - names
* @throws {string}
*/
const getAllTeamNames = async (_, res) => {
// aggregates all team "names" into a single array, like so:
// [{ names: ["team1,"team2","team3","team4", ...etc] }]
const teams = await Team.aggregate([
{ $group: { _id: null, names: { $addToSet: "$team" } } },
{ $unwind: "$names" },
{ $sort: { names: 1 } },
{ $group: { _id: null, names: { $push: "$names" } } },
{ $project: { _id: 0, names: 1 } },
]);
// returns "names" array (["team1,"team2","team3","team4", ...etc])
res.status(200).json({ names: teams[0].names });
};
export default getAllTeamNames;
next.config. js - это установит sh пул соединений и зарегистрирует модели до следующей загрузки
require("./database"); // establishes the mongo connection
require("./models/all"); // registers the models to the connection
...etc