2013-05-23 5 views
0

В настоящее время я использую 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» глобально?

+0

Убедитесь, что файл, который объявляет модель ('mongoose.model ("Post", postSchema) ') требуется * до *, вы пытаетесь получить модель (' mongoose («Post»)). – robertklep

+0

Однако возможно ли, чтобы эта переменная «Опубликовать» объявлялась глобально? – Junhao

+0

Ну, вы можете использовать 'global.Post = mongoose.model (...)', чтобы объявить его, и 'global.Post' использовать его в другом месте, но это плохая практика, поскольку это затрудняет сохранение и понимание вашего кода. – robertklep

ответ

-2

CoffeeScript был обновлен около месяца назад

ваш код должен выглядеть следующим образом (то есть)

postSchema = new Schema { 
    title: { 
    type: String 
    default: "" 
    trim: true 
    }, 

    body:{ 
    type: String 
    default: "" 
    trim: true 
    } 
} 
+0

Извините, но это не работает. module.exports = mongoose.model («Post», postSchema), похоже, не работает глобально – Junhao

2

Похоже, вам нужно экспортировать схему Post в файл Post.coffee. Попробуйте добавить

module.exports = Post 

в конец файла внутри папки с образцом.

+0

Он все еще не работает. Когда я регистрирую схему через mongoose.model («Post», postSchema »), он зарегистрирован глобально? Или может быть, что сценарий модели даже не запускался? – Junhao

+0

Вот пример того, как убедиться, что все экспортировано должным образом : https://github.com/LearnBoost/mongoose/tree/master/examples/express/connection-sharing. – toddles2000

+0

Можно ли экспортировать его во всем мире? Например, mongoose = require («mongoose») в app.coffee и i может получить доступ к мангусте из других скриптов, кроме app.coffee. Спасибо, куча! – Junhao

Смежные вопросы