2017-01-31 8 views
0

このトピックの質問を読んだことがあります。しかし私は解決策を見つけることができませんでした。なぜなら私はSchemaをうまく定義したと思うからです。MongoDB referenceError:スキーマが定義されていません

私のmodels.jsはこのようなものです。

var mongoose = require('mongoose'); 


var userSchema = new mongoose.Schema({ 
username: String, 
password: String, 
created_at: { type: Date, default: Date.now } 
}); 

var todoSchema = new mongoose.Schema({ 
title: String, 
done: Boolean, 
priority: String, 
deadLine: String, 
masterDetailNote: String 
}); 

mongoose.model('User', userSchema); 
mongoose.model('Todo', todoSchema); 

私のapi.jsはこのようなものです。

var express = require('express'); 
var router = express.Router(); 
var mongoose = require('mongoose'); 
var Todo = mongoose.model('Todo', todoSchema); 

router.use(function(req, res, next) { 

if (req.method === "GET") { 
    return next(); 
} 

if (!req.isAuthenticated()) { 
    return res.redirect('#/login'); 
} 
return next(); 
}); 
router.route('/posts') 

//returns all todos 
.get(function(req, res) { 

Todo.find(function(err, data) { 

    if (err) { 
     return res.send(500, err); 
    } 

    return res.send(data); 

}); 

}) 

//creates a new todo 
.post(function(req, res) { 

var todo = new Todo(); 
todo.title = req.body.title; 
todo.done = req.body.done; 
todo.priority = req.body.priority; 
todo.deadLine = req.body.deadLine; 
todo.masterDetailNote = req.body.masterDetailNote; 

todo.save(function(err, post) { 
    if (err) { 
     return res.send(500, err); 
    } 
    return res.json(todo); 
    }); 
}); 

router.route('/posts/:id') 

//egy bizonyos Todo-t hoz vissza 
.get(function(req, res) { 
Todo.findById(req.params.id, function(err, post) { 
    if (err) 
     res.send(err); 
    res.json(post); 
}); 
}) 

//frissít egy todot 
.put(function(req, res) { 
Todo.findById(req.params.id, function(err, post) { 
    if (err) 
     res.send(err); 

    todo.title = req.body.title; 
    todo.done = req.body.done; 
    todo.priority = req.body.priority; 
    todo.deadLine = req.body.deadLine; 
    todo.masterDetailNote = req.body.masterDetailNote; 

    todo.save(function(err, post) { 
     if (err) 
      res.send(err); 

     res.json(post); 
    }); 
    }); 
}) 

.delete(function(req, res) { 
Todo.remove({ 
    _id: req.params.id 
}, function(err) { 
    if (err) 
     res.send(err); 
    res.json("deleted :("); 
}); 
}); 

module.exports = router; 

私はサーバーをstratしようとすると、エラーメッセージが表示されます。

var Todo = mongoose.model('Todo', todoSchema); 

RefferenceError:todoSchemaは定義されていません。 userSchemaとまったく同じように定義されているので、わかりません。しかし、私はuserSyhemaをエラーなく使用することができます。そのためtodoSchema

答えて

3

は同じなしapp.js使用で定義されていません:あなたのapi.jsでとてもmongoose.model('modelName')

var Todo = mongoose.model('Todo');// ensure first model file is loaded 

代わりの

var Todo = mongoose.model('Todo', todoSchema); 

OR

のように使用します
require('modelDirectory/model.js');//load model file first then use model from there 
var Todo = mongoose.model('Todo'); 

OR

モデルごとに別々のファイルを作成します。 todo.js

var mongoose = require('mongoose'); 

var todoSchema = new mongoose.Schema({ 
title: String, 
done: Boolean, 
priority: String, 
deadLine: String, 
masterDetailNote: String 
}); 

module.exports = mongoose.model('Todo', todoSchema); 

で例えばとapi.js

var Todo = require('modelDirectory/todo.js'); 
+0

からファイル、エラーメッセージが「MissingSchemaError:スキーマをモデルに登録されていない 『である藤堂』(名mongoose.modelを使用してください。 、スキーマ)。 –

+0

最初に負荷モデルファイル。回答または部分@R.Andrisを参照してください –

+0

それはそれを修正する必要がありますが、それを見つけることはありません。エラー:モジュール./models/models.jsが見つかりません。私は理解していない、それは実際にそのフォルダに存在する。 –

0

にあなたは数行のコードを逃します。 models.js

まずapi.js

var models = require('./models.js')

で次に

var User = mongoose.model('User', userSchema);

var Todo = mongoose.model('Todo', todoSchema);

module.exports = {User: User, Todo: Todo}

を追加

var Todo = models.Todo;

希望します。

0

このファイルをアプリに必要とする必要があります。JSと

require('YOUR PATH') 

輸出その場合、モデルのページ

var User=mongoose.model('User', userSchema); 
    module.exports = User 
関連する問題