Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在NodeJs中启用服务器端时,全局搜索在DataTable中不起作用_Node.js_Mongoose_Datatables_Datatables 1.10 - Fatal编程技术网

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

Node.js 在NodeJs中启用服务器端时,全局搜索在DataTable中不起作用,node.js,mongoose,datatables,datatables-1.10,Node.js,Mongoose,Datatables,Datatables 1.10,我正在尝试从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.s

我正在尝试从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);
        }

 });
Js代码

$(document).ready(function(){
   $('#example').DataTable({
      "processing": true,
      "serverSide": true,
      "ajax": "http://localhost:8080/gettable"
   });
})
正如我所说的,我成功地从服务器获取数据,并通过服务器端分页显示到数据表中,但搜索不起作用,但在搜索div中无论我搜索什么,我都会在搜索数组中获得该值,如下所示

search: { value: 'svs', regex: 'false' },
  _: '1548653540009' }
但它并没有在datatable中实现以过滤列。

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

 });
app.get('/gettable',(req,res)=>{
控制台日志(请求查询);
var query={},
//要在表中显示的列的数组
列=['name'、'lastname'、'email'、'pass'、'birthdate'、'zipcode'、'phonenumber'、];
//检查是否启用了全局搜索并定义了其值
if(typeof req.query.search!='undefined'&&req.query.search.value!=''){
//获取全局搜索值
var text=req.query.search.value;
//迭代每个字段定义以检查是否启用了搜索
//是否为该特定列。您可以设置搜索启用/禁用
//在数据表初始化中。
对于(变量i=0;i 0){
mytable.recordsTotal=result.totalDocs;
mytable.recordsFiltered=result.totalDocs;
for(在result.docs中输入var){
var数据=[];
for(列中的var列){
data.push(result.docs[key][column]);
}
mytable.data.push(数据);
}
}
res.json(mytable);
}
});

您的意思是,您正在通过查询(
req.query
)搜索您的数据库,但它不起作用(即,您没有返回搜索结果),或者您的数据库使用正确的数据进行响应并将其加载到HTML中,但您无法搜索此数据?是哪一个?@EmmanuelNK我正在从服务器获取数据并将其放入数据表中,但数据表默认搜索栏不工作。我正在使用引导的默认数据表4@Arjun,仅启用服务器端,全局搜索将无法立即运行。您必须在节点js中添加该代码进行搜索,然后将响应发送回DataTableOk@PrashantPokhriyal我知道了。您能帮我在nodeJS中如何执行该操作吗。@Arjun,我真的很抱歉,我不是nodeJS的人。无论如何,我会尽力为你提供一个解决方案谢谢你的帮助Prashant,这个逻辑不起作用var text没有得到任何东西,我认为这是问题所在。我在用户内部编写了你的代码。在for循环后分页,现在我在控制台中得到值,我在搜索栏中写入,这意味着我们的var文本是完美的,但进一步的逻辑可能不正确。它还不起作用,Prashant,在控制台中,列只给出数字,就像我有7列,所以在控制台中,它打印0,然后在新行1中,然后2到7,但它没有打印任何数据好的,当我写console.log(query[column]),它的打印列值是0{'$regex':'dvd'},列值是1{'$regex':'dvd'}…直到第7列。这意味着我们在regex中得到了值,但表中没有任何变化。我已经更新了我的答案@Arjun,现在可以使用列数组在for循环中生成数据