首页 > 解决方案 > 导入数据库架构时 Express.js 类型错误

问题描述

在 MEAN 堆栈上创建一个小型 Web 应用程序,我正在将我的模式迁移到一个单独的“模型”目录。当模式在同一个app.js文件中定义时,一切正常;但是,当我将代码切换到一个单独的更模块化的文件并导入它时,我得到了这个错误:

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

当它到达需要查找玩家的第一条路线时会发生此错误,并且在盯着它几个小时后我不太确定我错过了什么。

我的 app.js 文件:

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});        
        }
    });
});

和我试图导入的 player.js 文件:

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);

上面的模式定义和模型定义在 app.js 文件中时完全可以正常工作,但在导入时就不行了。我在这里想念什么?在此先感谢您的帮助。

标签: node.jsexpressmean-stack

解决方案


我认为您的文件名在 require 语句中是错误的。它的

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

因为您的文件名是 player.js,而不是 player.js,并且如果您将 js 文件存储在模型文件夹中。请检查如何使用文件路径导航

/ 表示返回根文件夹,然后向前/向下遍历。

./ 表示从我们当前所在的文件夹开始并向前/向下遍历

../ 表示上一个目录,然后开始遍历。

你的后端也应该是这样的。 后端文件管理


推荐阅读