Как использовать схему mongoose для получения данных и отправки их клиенту?

#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);