2015-03-27 2 views
7

Я использую мангуст и возвращаю документы из коллекции, которая будет отображаться с использованием данных. Однако у меня есть некоторые проблемы. Клиентский кодПравильный способ возврата из mongo в datatable

var table = $('#dataTables-example').DataTable({ 
      "bProcessing" : true, 
      "bServerSide" : true, 
      "ajax" : { 
      "url" : "/mongo/get/datatable", 
      "dataSrc": "" 
      }, 
      "columnDefs": [ 
      { 
       "data": null, 
       "defaultContent": "<button id='removeProduct'>Remove</button>", 
       "targets": -1 
      } 
      ], 
      "aoColumns" : [ 
      { "mData" : "name" }, 
      { "mData" : "price" }, 
      { "mData" : "category" }, 
      { "mData" : "description" }, 
      { "mData" : "image" }, 
      { "mData" : "promoted" }, 
      { "mData" : null} 
      ] 
     }); 

Затем это обрабатывается на стороне сервера не используя следующие

db.once('open', function callback() 
    { 
     debug('Connection has successfully opened'); 

     productSchema = mongoose.Schema({ 
      name: String, 
      price: String, 
      category: String, 
      description: String, 
      image: String, 
      promoted: Boolean 
     }); 

     Product = mongoose.model('Product', productSchema, 'products'); 
    }); 

    exports.getDataForDataTable = function (request, response) { 
     Product.dataTable(request.query, function (err, data) { 
     debug(data); 
     response.send(data); 
    }); 
}; 

Если я использую приведенный выше код DataTable не в состоянии отобразить документы, утверждая не совпадающие записи найденоBUT он правильно отображает количество документов Показано 1 - 2 из 2 записей. Если я изменю код на стороне сервера на ответ с data.data вместо data, документы будут правильно заполнены в таблице BUT количество записей больше не найдено, вместо этого говорят Показаны с 0 по 0 из 0 записей (от NaN total записей)

exports.getDataForDataTable = function (request, response) { 
      Product.dataTable(request.query, function (err, data) { 
      debug(data); 
      response.send(data.data); 
     }); 

фактическое data возвращается при запросе Монго является

{ draw: '1', recordsTotal: 2, recordsFiltered: 2, data: [ { _id: 5515274643e0bf403be58fd1, name: 'camera', price: '2500', category: 'electronics', description: 'lovely', image: 'some image', promoted: true }, { _id: 551541c2e710d65547c6db15, name: 'computer', price: '10000', category: 'electronics', description: 'nice', image: 'iamge', promoted: true } ] } 

ответ

0

Третий параметр в mongoose.model устанавливает collecti по имени, которое будет множественным и нижним, автоматически, поэтому оно не имеет никакого эффекта в этом случае.

Предполагая, что ваша Product переменная была объявлена ​​на ранней стадии и на глобальном, попробуйте следующее:

products = mongoose.model('products', productSchema); Product = require('mongoose').model('products');

+0

Я не уверен, что я следую. Попробуй вместо чего? Как вы думаете, какой эффект у вас будет? –

+0

Он украден из официального примера на https://github.com/lepazmino/mongoose-datatable-demo/blob/master/mongo.js. Я чувствую, что когда вы вызываете Product.dataTable, он не может получить доступ схему продукта и, таким образом, выдает форматирование извлеченных данных в указанный битсон/json. –

+0

Вообще говоря, сохранение моделей в папке модели, запуск плагина там и экспорт модели - лучший образец архитектуры программного обеспечения, а не определение схемы внутри db.once. –

0

Вы пытались удалить поле DATASRC в DataTable конфигурации:

"ajax" : { 
    "url" : "/mongo/get/datatable", 
}, 
+2

Если вы знаете, что dataSrc является проблемой, скажите так. Если вы не уверены, попробуйте сами, прежде чем предлагать. Если вы просто догадываетесь, напишите как комментарий к вопросу, а не как ответ. – martynasma

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