Node.js 在NodeJs中启用服务器端时,全局搜索在DataTable中不起作用
我正在尝试从MongoDB服务器获取表单数据,并使用nodeJs将其显示到数据表中。我成功地使用npm Paginate v-2插件完成了服务器端分页。但现在搜索不起作用。下面是我的NodeJs和javascript文件代码。请帮我找一下 NodeJs代码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
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循环中生成数据