Express. js Ошибка типа при импорте схемы БД - PullRequest
0 голосов
/ 11 апреля 2020

Создание небольшого веб-приложения в стеке MEAN, и я в процессе переноса моих схем в отдельный каталог "models". Когда схемы определены в одном файле app. js, все работает нормально; однако, когда я переключаю код на отдельный более модульный файл и импортирую его, я получаю эту ошибку:

TypeError: Player.find is not a function
at /Users/username/code/express/WebApp/v3/app.js:57:12

Эта ошибка возникает, когда он попадает на тот первый маршрут, где он должен искать игроков, и я ' Я не совсем уверен, чего мне не хватает после того, как я смотрю на это часами.

Мое приложение. js file:

var express    = require("express"),
    app        = express(),
    bodyParser = require("body-parser"),
    mongoose   = require("mongoose"),
    Player     = require("./models/players")

const port     = 3000;

mongoose.connect("mongodb://localhost/players", { useNewUrlParser: true, useUnifiedTopology: true });
app.set("view engine", "ejs");
app.use(bodyParser.urlencoded({extended: true}));


// PLAYER SCHEMA ORIGNALLY DEFINED HERE BUT NOW ATTEMPTING TO MOVE TO DIFF DIRECTORY & IMPORT
/*var playerSchema = new mongoose.Schema({
    player: String,
    position: String,
    description: String
});
var Player = mongoose.model("Player", playerSchema);*/

app.get("/", function(req, res) {
    res.render("landing");
});

app.get("/players", function(req, res) {
    // Get all players from DB
    Player.find({}, function(err, allPlayers){
        if(err){
            console.log(err);
        } else {
            console.log("We're good.");
            res.render("players", {players: allPlayers});        
        }
    });
});

и мой проигрыватель. js file, который я ' m пытается импортировать:

var mongoose   = require("mongoose");

var playerSchema = new mongoose.Schema({
    player: String,
    position: String,
    description: String
});


// Compile into a model
module.exports = mongoose.model("Player", playerSchema);

Приведенное выше определение схемы и определение модели работают совершенно нормально, когда они находятся в файле приложения. js, но не при импорте. Что мне здесь не хватает? Заранее спасибо за помощь.

1 Ответ

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

Я думаю, что ваше имя файла неверно в требовании. Его

const Player = require('../models/player')

в качестве имени вашего файла - плеер. js, а не плееры. js, и если вы сохранили файл js в папке модели. Проверьте, как перемещаться, используя путь к файлу

/ означает go обратно в папку root, затем переходите вперед / вниз.

. / Означает, что начинаются в папке, в которой мы находимся в настоящее время входите и двигайтесь вперед / вниз

.. / означает go вверх по одному каталогу, затем начинайте перемещение.

И ваш бэкэнд должен выглядеть следующим образом. Управление внутренними файлами

...