I've read the questions in this topic. But I wasn't able to find the solution, because I think I defined the Schema well.
My models.js is like this.
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);
My api.js is like this.
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;
When i try to strat the server it shows the error message.
var Todo = mongoose.model('Todo', todoSchema);
RefferenceError: todoSchema is not defined. I don't really understand because it is defined exactly like the userSchema. But I can use the userSyhema without any error.
I've read the questions in this topic. But I wasn't able to find the solution, because I think I defined the Schema well.
My models.js is like this.
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);
My api.js is like this.
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;
When i try to strat the server it shows the error message.
var Todo = mongoose.model('Todo', todoSchema);
RefferenceError: todoSchema is not defined. I don't really understand because it is defined exactly like the userSchema. But I can use the userSyhema without any error.
Share Improve this question edited Jan 31, 2017 at 11:55 ares 4,4136 gold badges37 silver badges64 bronze badges asked Jan 31, 2017 at 11:39 UmskiptingurUmskiptingur 1251 silver badge10 bronze badges4 Answers
Reset to default 4Because of todoSchema
is not defined in app.js
use without like: mongoose.model('modelName')
so in your api.js use like
var Todo = mongoose.model('Todo');// ensure first model file is loaded
instead of
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
create separate file for each model. for example in 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);
and in api.js
var Todo = require('modelDirectory/todo.js');
You missing few lines of code.
First in models.js
add
var User = mongoose.model('User', userSchema);
var Todo = mongoose.model('Todo', todoSchema);
module.exports = {User: User, Todo: Todo}
Then in api.js
var models = require('./models.js')
var Todo = models.Todo;
Hope this helps.
You need to require that file in app.js and
require('YOUR PATH')
export the file from model page
var User=mongoose.model('User', userSchema);
module.exports = User
Todo.js
file:
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var todoSchema = new Schema({
title: String,
date: String,
pleted: String,
});
module.exports = mongoose.model("todo",todoSchema);
This is my models file Todo.js. İf you wanna don't get this error, you should import your model file in your api file.
For example I have a api file todos.js
under routes file.
I do get, post, put operation in routes/todos.js
.
I imported models file in the todos.js
.
var express = require('express');
var router = express.Router();
var Todo = require("../models/Todo");
router.get('/', function(req, res, next) {
Todo.find().then((todos) => {
res.json(todos);
}).catch((err) => {
res.json(err);
});
});
发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745311488a4622019.html
评论列表(0条)