2015-03-27 14 views
7

Ich benutze Mungo und Rückgabe von Dokumenten aus einer Sammlung mit Datatables angezeigt werden. Ich habe jedoch einige Probleme. Die clientseitige Code istKorrekter Weg von Mongo zu Datentabelle

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} 
      ] 
     }); 

Dann ist dieser auf der Server-Seite behandelt die folgenden

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

Verwendung Wenn ich den obigen Code verwenden, die Datentabelle, die Dokumente angezeigt werden fehlschlägt, behauptet keine Bilder gefunden gefundenABER zeigt es korrekt die Anzahl der Dokumente Zeigt 1 bis 2 von 2 Einträge. Wenn ich den serverseitigen Code zur Antwort mit data.data anstelle von data ändere, werden die Dokumente in der Tabelle korrekt ausgefüllt, ABER die Anzahl der Datensätze wird nicht mehr gefunden, stattdessen Zeige 0 bis 0 von 0 Einträge (gefiltert von NaN total Einträge)

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

die tatsächliche data zurückgegeben wird, wenn die Abfrage mongo

in mongoose.model
{ 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 } ] } 

Antwort

0

Der dritte Parameter ist die collecti legt auf Name, der automatisch pluralisiert und kleingeschrieben wird, so dass er in diesem Fall keine Wirkung hat.

Angenommen, Ihre Product Variable früh und global deklariert worden ist, versuchen Sie dies:

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

+0

Ich bin nicht sicher, dass ich folge. Versuchen Sie statt was? Was für eine Auswirkung wird das haben? –

+0

Es ist gestohlen von dem offiziellen Beispiel unter https://github.com/lepazmino/mongoose-datatable-demo/blob/master/mongo.js Ich fühle, dass, wenn Sie Product.dataTable aufrufen, es ist nicht in der Lage zu zugreifen das Produktschema und damit die Formatierung der abgerufenen Daten an den angegebenen bson/json ausstellen. –

+0

Im Allgemeinen ist es besser, wenn Sie Ihre Modelle in einem Modellordner behalten, das Plugin dort initiieren und das Modell exportieren, anstatt das Schema in db.once zu definieren. –

0

Haben Sie versucht, das DATASRC Feld in der Datatable-Konfiguration zu entfernen:

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

Wenn Sie wissen, dass die DataSrc ein Problem ist, dann sagen Sie es. Wenn Sie nicht sicher sind, versuchen Sie es selbst, bevor Sie es vorschlagen. Wenn Sie nur raten, schreiben Sie als Kommentar zu der Frage, nicht als Antwort. – martynasma

Verwandte Themen