#javascript #node.js #mongodb #mongoose
#javascript #node.js #mongodb #mongoose
Вопрос:
Я новичок в nodejs, поэтому у меня есть приложение, связанное с mongodb, теперь у меня есть api getAllDiagrams
в маршрутизаторе, который должен отправлять все данные диаграммы клиенту, подход, который я пытаюсь реализовать, заключается в том, что я хочу вызвать db из контроллера, и как только у меня будут данные, я потребую их в маршрутизаторе и отправлю их клиентуНиже приведен код, который я не смог заставить его работать и получил ошибку then is not defined
. Есть идеи, что реализовано неправильно или какой-либо лучший способ использовать этот подход.
app.js
var express = require('express');
var app = express();
var router = express.Router();
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/develop-modeler');
require('./server/api/diagram/diagram.model.js');
mongoose.connection.on('error', function(err) {
console.error('MongoDB connection error: ' err);
});
app.use(express.static(path.join(__dirname, 'public')));
app.listen(8760, function() {
console.log('I am listening 8760...');
})
diagram.controller.js
var Diagram = require('./diagram.model');
var mongoose = require('mongoose');
module.exports = function index(req, res) {
Diagram.find({}, function(err, result) {
if (!err) {
console.log('Response from controller', result);
return res.send(result);
}
});
}
diagram.model.js
var mongoose = require('mongoose');
/*var User = require('../user/user.model.js');
var Group = require('../group/group.model.js');*/
var DiagramSchema = new mongoose.Schema({
text: String,
owner: {type: String, ref:'User'},
groups: [{type: String, ref: 'Group'}],
users: [{type: String, ref: 'User'}],
string: String
});
mongoose.model('Diagram', DiagramSchema);
router.js
var express = require('express');
var controller = require('./diagram.controller');
var router = express.Router();
console.log('THis is in router',controller.index());
router.get('/getAllDiagram',controller.index());
/*router.get('/', controller.index);*/
module.exports = router;
Комментарии:
1. Почему yu используется
Diagram.find.then
в вашем запросе, есть ли какие-либо обещания, которые вы используете?2. Я не использую никаких обещаний, весь код вставлен в вопрос.
Ответ №1:
Как я вижу, вы не используете никаких обещаний, но ожидаете вернуть обещание в своем запросе,.Но это способ обещания, поэтому вы получаете эту ошибку
var express = require('express');
var controller = require('./diagram.controller');
var router = express.Router();
router.get('/getAllDiagram',controller.index());
module.exports = function index(req, res) {
Diagram.find({}, function(err, result) {
if (!err) {
console.log('Response from controller', result);
return res.send(result);
}
});
}
Обновите свою схему следующим образом
var mongoose = require('mongoose');
/*var User = require('../user/user.model.js');
var Group = require('../group/group.model.js');*/
var DiagramSchema = mongoose.Schema({
text: String,
owner: {type: String, ref:'User'},
groups: [{type: String, ref: 'Group'}],
users: [{type: String, ref: 'User'}],
string: String
});
module.exports=mongoose.model('Diagram', DiagramSchema);
Комментарии:
1. Ошибка типа: Diagram.find не является функцией
2. Можете ли вы удалить
new
ключевое слово в схеме, а затем попробовать?3. та же ошибка
TypeError: Diagram.find is not a function
4. ах, ты не экспортировал свою модель
5. добавьте эту строку в конец вашей схемы
module.exports=mongoose.model('Diagram', DiagramSchema);