在 Node Js 中启用服务器端时,全局搜索在 DataTable 中不起作用

Global search is not working in DataTable when server side is enabed in NodeJs

我正在尝试从 MongoDB 服务器获取表单数据并使用 nodeJs.I 将其显示为数据 table 已成功使用 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"
   });
})

正如我所说,我成功地从服务器获取数据并通过服务器端分页显示到数据 table 中,但是搜索不起作用但是在搜索 div 时,无论我搜索什么,我都是在搜索数组中获取该值,像这样

search: { value: 'svs', regex: 'false' },
  _: '1548653540009' }

但它没有在数据table中实现过滤列。

正如我在 中所说,当在 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);
        }

 });