/ / Schéma Mongoose nie je zaregistrovaná pre model - node.js, mongodb, mongoose

Program Mongoose Schema nebol zaregistrovaný pre model - node.js, mongodb, mongoose

Učím sa stredný zásobník a keď sa pokúšam server spustiť pomocou

npm start

Dostávam výnimku, ktorá hovorí, že:

schema hasn"t been registered for model "Post". Use mongoose.model(name, schema)

tu je môj kód vo vnútri /models/Posts.js

var mongoose = require("mongoose");

var PostSchema = new mongoose.Schema({
title: String,
link: String,
upvotes: { type: Number, default: 0 },
comments: [{ type: mongoose.Schema.Types.ObjectId, ref: "Comment" }]
});

mongoose.model("Post", PostSchema);

ako vidím, schéma by mala byť zaregistrovaná pre model „Príspevok“, ale čo môže spôsobovať vyvolanie výnimky?

Vopred ďakujem.

edit: Tu je chyba výnimky

/home/arash/Documents/projects/personal/flapper-news/node_modules/mongoose/lib/index.js:323
throw new mongoose.Error.MissingSchemaError(name);
^
MissingSchemaError: Schema hasn"t been registered for model "Post".
Use mongoose.model(name, schema)

a tu je kód app.js s mongoose inicializáciou:

var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/news");
require("./models/Posts");
require("./models/Comments");

pred riadkom:

app.use("/", routes);

odpovede:

92 pre odpoveď č. 1

Nie je to problém s exportom modelu. Mal som rovnaký problém.

Skutočným problémom je, že pre modely je potrebné vyhlásenie

var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/news");
require("./models/Posts");
require("./models/Comments");

boli pod závislosťami trás. Jednoducho presuňte závislosti mongoDB nad závislosti závislostí. Takto by to malo vyzerať:

// MongoDB
var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/news");
require("./models/Posts");
require("./models/Comments");

var routes = require("./routes/index");
var users = require("./routes/users");

var app = express();

10 pre odpoveď č. 2

Ak to niekto nedokáže opraviť prístupom k správnej odpovedi (ako ja), skúste sa pozrieť na vytvorenie schémy. Napísal som „ref“ ako „User“, ale správne bolo „user“.

zle:

createdBy: {
type: Schema.Types.ObjectId,
ref: "User"
}

správne:

createdBy: {
type: Schema.Types.ObjectId,
ref: "user"
}

7 pre odpoveď č. 3

AK POUŽIJETE VIAC PRIPOJENÍ mongoDB


pozor, pri použití .populate () MUSÍTE poskytnúť model, pretože mongoose „nájde“ modely iba na rovnakom pripojení. tj kde:

var db1 = mongoose.createConnection("mongodb://localhost:27017/gh3639");
var db2 = mongoose.createConnection("mongodb://localhost:27017/gh3639_2");
var userSchema = mongoose.Schema({
"name": String,
"email": String
});

var customerSchema = mongoose.Schema({
"name" : { type: String },
"email" : [ String ],
"created_by" : { type: mongoose.Schema.Types.ObjectId, ref: "users" },
});

var User = db1.model("users", userSchema);
var Customer = db2.model("customers", customerSchema);

správne:

Customer.findOne({}).populate("created_by", "name email", User)

alebo

Customer.findOne({}).populate({ path: "created_by", model: User })

nesprávny (produkuje chybu „schéma nebola zaregistrovaná pre model“):

Customer.findOne({}).populate("created_by");

0 pre odpoveď č. 4

Rozpracované k odpovedi Rafaela Grilliho vyššie,

správne:

var HouseSchema = new mongoose.Schema({
date: {type: Date, default:Date.now},
floorplan: String,
name:String,
house_id:String,
addressLine1:String,
addressLine2:String,
city:String,
postCode:String,
_locks:[{type: Schema.Types.ObjectId, ref: "xxx"}] //ref here refers to the first parameter passed into mongoose.model()
});
var House = mongoose.model("xxx", HouseSchema, "houseschemas");

0 pre odpoveď č. 5

Mali by ste tiež skontrolovať, či vo svojej databáze nemáte špinavé údaje. Skončil som s dokumentom obsahujúcim verziu referenčného modelu s malými písmenami (user namiesto User). Toto spôsobuje chybu a je neuveriteľne ťažké ho vypátrať.

Ľahko opraviteľné pomocou rýchleho mongo dotazu:

db.model.updateMany({ approvedByKind: "user" }, { $set: { approvedByKind: "User" } })