Глобальный поиск не работает в DataTable, когда сторона сервера включена в NodeJ - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь получить данные формы с сервера MongoDB и показать их в таблице данных, используя nodeJs.Я успешно выполнил разбиение на страницы на стороне сервера, используя плагин npm Paginate v-2.Но сейчас поиск не работает.Ниже мой код NodeJs и javascript-файлов.Пожалуйста, помогите мне для поиска.

Код NodeJs

app.get('/gettable',(req,res)=>{
    console.log(req.query);
    user.paginate({},{
        page:Math.ceil(req.query.start / req.query.length) + 1,
        limit:parseInt(req.query.length)

    },function(err,result){
        var mytable = {
            draw:req.query.draw,
            recordsTotal:0,
            recordsFiltered:0,
            data:[],

        }
        if(err) {
            console.log(err);
            res.json(mytable);
        } else {
            if(result.totalDocs > 0) {
                mytable.recordsTotal = result.totalDocs;
                mytable.recordsFiltered = result.totalDocs;

                for(var key in result.docs) {
                    mytable.data.push([
                        result.docs[key]['name'],
                        result.docs[key]['lastname'],
                        result.docs[key]['email'],
                        result.docs[key]['pass'],
                        result.docs[key]['birthdate'],
                        result.docs[key]['zipcode'],
                        result.docs[key]['phonenumber'],
                    ]);
                }
            }
            res.json(mytable);
        }

 });

Код DisplayTable.Js

$(document).ready(function(){
   $('#example').DataTable({
      "processing": true,
      "serverSide": true,
      "ajax": "http://localhost:8080/gettable"
   });
})

Как я уже сказал, я успешно получаю данные с сервера и показываюв таблицу данных с разбивкой по страницам на стороне сервера, но поиск не работает, но при поиске div, что бы я ни искал, я получаю это значение в массиве поиска, как это.

1 Ответ

0 голосов
/ 28 января 2019

Как я уже сказал в комментарии , поиск не будет работать сразу после включения серверной части в DataTable, потому что теперь вся функциональность, будь то сортировка, разбиение по страницам, ограничение и поиск, имеетбыть реализованным на сервере.DataTable отправит только параметр, необходимый для выполнения функциональности.Ниже приведен код только для справки, он не проверен, и вы также можете получить ошибку.Вы можете получить входные данные из следующего кода.Не стесняйтесь редактировать следующий код, если в случае получения ошибок, чтобы он мог помочь будущим читателям.

app.get('/gettable',(req,res)=>{
    console.log(req.query);

    var query = {},

       // array of columns that you want to show in table
       columns = ['name', 'lastname', 'email', 'pass', 'birthdate', 'zipcode', 'phonenumber',];

    // check if global search is enabled and it's value is defined
    if (typeof req.query.search !== 'undefined' && req.query.search.value != '') {

        // get global search value
        var text = req.query.search.value;

        // iterate over each field definition to check whether search is enabled
        // for that particular column or not. You can set search enable/disable
        // in datatable initialization.
        for (var i=0; i<req.query.columns.length; i++) {
            requestColumn = req.query.columns[i];
            column = columns[requestColumn.data];

            // if search is enabled for that particular field then create query
            if (requestColumn.searchable == 'true') {
                query[column] = {
                    $regex: text,
                };
            }
        }
    }

    user.paginate(query,{
        page:Math.ceil(req.query.start / req.query.length) + 1,
        limit:parseInt(req.query.length)

    },function(err,result){
        var mytable = {
            draw:req.query.draw,
            recordsTotal:0,
            recordsFiltered:0,
            data:[],

        }
        if(err) {
            console.log(err);
            res.json(mytable);
        } else {
            if(result.totalDocs > 0) {
                mytable.recordsTotal = result.totalDocs;
                mytable.recordsFiltered = result.totalDocs;

                for(var key in result.docs) {
                    var data = [];
                    for(var column in columns) {
                        data.push(result.docs[key][column]);
                    }
                    mytable.data.push(data);
                }
            }
            res.json(mytable);
        }

 });
...