2015-03-27 14 views
7

Tôi đang sử dụng mongoose và trả lại tài liệu từ bộ sưu tập được hiển thị bằng cách sử dụng datatables. Tôi đang gặp một số vấn đề. Mã client-side làCách chính xác để trở về từ mongo đến 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} 
      ] 
     }); 

Sau đó này xử lý trên server-side sử dụng

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

Nếu tôi sử dụng đoạn mã trên DataTable thất bại trong việc hiển thị các văn bản, tuyên bố không có hồ sơ phù hợp sau tìm thấyNHƯNG nó hiển thị chính xác số lượng tài liệu Hiển thị 1 đến 2 của 2 mục nhập. Nếu tôi thay đổi mã phía máy chủ để phản hồi bằng data.data thay vì data, các tài liệu được điền chính xác trong bảng NHƯNG số lượng hồ sơ không còn được tìm thấy, thay vào đó nói Hiển thị 0 đến 0 trong số 0 mục (được lọc từ tổng số NaN mục)

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

các thực tế data được trả về khi truy vấn Mongo là

{ 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 } ] } 

Trả lời

0

tham số thứ ba trong mongoose.model đặt collecti trên tên được số nhiều và được hạ thấp tự động để nó không có hiệu lực trong trường hợp này.

Giả sử biến Product của bạn đã được công bố từ rất sớm và toàn cầu, thử điều này:

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

+0

Tôi không chắc chắn tôi làm theo. Hãy thử thay vì những gì? Bạn nghĩ điều này có ảnh hưởng gì? –

+0

Nó bị lấy cắp từ ví dụ chính thức tại https://github.com/lepazmino/mongoose-datatable-demo/blob/master/mongo.js Tôi cảm thấy rằng khi bạn đang gọi Product.dataTable, nó không thể truy cập lược đồ sản phẩm và do đó có vấn đề định dạng dữ liệu đã truy xuất đến bson/json được chỉ định. –

+0

Nói chung, giữ cho các mô hình của bạn bên trong một thư mục mô hình, khởi tạo plugin và xuất mô hình là một mẫu kiến ​​trúc phần mềm tốt hơn là xác định lược đồ bên trong db.once. –

0

Bạn cố gắng để loại bỏ các lĩnh vực dataSrc trong cấu hình DataTable:

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

Nếu bạn biết dataSrc là một vấn đề, sau đó nói như vậy. Nếu bạn không chắc chắn, hãy tự mình thử trước khi đề xuất. Nếu bạn chỉ đoán, hãy đăng dưới dạng nhận xét cho câu hỏi, không phải là câu trả lời. – martynasma

Các vấn đề liên quan