В настоящее время я использую AngularJS с Express-Jade и Mongoose с Coffeescript. Структура каталогов разделена на Model View Controller.Mongoose не регистрирующаяся модель
Это post.coffee в модели
mongoose = require("mongoose")
Schema = mongoose.Schema
postSchema = new Schema(
title:
type: String
default: ""
trim: true
body:
type: String
default: ""
trim: true
)
postSchema.path("title").validate ((title) ->
title.length > 0
), "Post title cannot be blank"
postSchema.path("body").validate ((body) ->
body.length > 0
), "Post body cannot be blank"
Post = mongoose.model("Post", postSchema)
И это post.coffe в контроллере
mongoose = require("mongoose")
Post = mongoose.model("Post")
# _ = require("underscore")
# GET
exports.posts = (req, res) ->
pList = Post.find
posts = []
pList.forEach (post, i) ->
posts.push
id: i
title: post.title
text: post.text.substr(0, 50) + "..."
res.json posts: posts
И этот фрагмент происходит от app.coffee
# Bootstrap models
models_path = __dirname + "/models"
model_files = fs.readdirSync(models_path)
model_files.forEach (file) ->
require models_path + "/" + file
Тем не менее, post.coffee в контроллере бросает мне ошибку: MissingSchemaError: Schema не зарегистрировано для модели «Post»
Я знаю, что эту ошибку можно решить, добавив Post = mongoose.model («Post») в post.coffee в контроллере. Однако можно ли объявить эту переменную «Post» глобально?
Убедитесь, что файл, который объявляет модель ('mongoose.model ("Post", postSchema) ') требуется * до *, вы пытаетесь получить модель (' mongoose («Post»)). – robertklep
Однако возможно ли, чтобы эта переменная «Опубликовать» объявлялась глобально? – Junhao
Ну, вы можете использовать 'global.Post = mongoose.model (...)', чтобы объявить его, и 'global.Post' использовать его в другом месте, но это плохая практика, поскольку это затрудняет сохранение и понимание вашего кода. – robertklep