2016-11-23 53 views
1

好日子,hoomans!搜索查询的NodeJS和嵌套函数

我正在与这个小型的网络应用程序与NodeJS。我在我的网页上有几个搜索功能。但我想问一些关于这个搜索功能的嵌套函数。

我的代码中实际上没有错误。目前它工作得很好,但我问这个问题的原因是我不太相信我的算法。

最初的结构是,在搜索查询的后端部分,包含对数据库的搜索查询的整个代码块写入我的routes/grades.js中的app.post()方法内部文件。另一方面,前端使用AngularJS在位于public/javascripts目录中的单独文件中编写,该目录应使用提交按钮在请求时动态重新加载表格元素。

我认为这不是一个好的算法概念,因为我想到的情况是多个用户可以访问app.post()方法,并且可能会导致某些我不知道的问题。

所以现在,我想如果我可以使用回调和超时嵌套函数。我无法用语言形容这个了明确所以我就粘贴代码

在我的路线

原始代码:

路线/ grades.js

app.post('/grades', function(req, res, next){ 
    setTimeout(callback, 100); 
    try{ 
     var reqObj = req.body; 
     console.log("Request Object: " + reqObj["className"]); 
     req.getConnection(function(err, conn){ 
      if(err){ 
       console.error('SQL Connection error: ', err); 
       return next(err); 
      } 
      else{ 
       var insertSql = "SELECT Class_Name,Class_Code,Class_Instructor FROM classes WHERE Class_Name LIKE ?"; 
       var insertValues = [ 
        '%' + reqObj["className"] + '%' 
       ]; 
       var query = conn.query(insertSql, insertValues, function(err, result){ 
        if(err){ 
         console.error('SQL error: ', err); 
         return next(err); 
        } 
        var class_array = []; 
        for(var i=0; i<result.length; i++){ 
         class_array.push(result[i]); 
        } 
        console.log(class_array.valueOf()); 
        res.send([{ 
         info: 
          class_array.valueOf() 
        }]) 
       }); 
      } 
     }); 
    } 
    catch(ex){ 
     console.err("Internal error: " + ex); 
     return next(ex); 
    } 
}); 

现在,我修改了上面的routes/grades.js中的代码,使它更有意义(我认为是笑),它没有任何错误。但是,我仍然想知道哪些代码具有更好的算法,或者它们是否都有吸引力。洛尔

路线/ grades.js

router.post('/grades', function(req, res, next){ 
    searchForClass(req, res, next, function(){ 
     console.log("Class Search Success"); 
    }); 
}); 

function searchForClass(req, res, next, callback){ 
    setTimeout(callback, 100); 
    try{ 
     var reqObj = req.body; 
     console.log("Request Object: " + reqObj["className"]); 
     req.getConnection(function(err, conn){ 
      if(err){ 
       console.error('SQL Connection error: ', err); 
       return next(err); 
      } 
      else{ 
       var insertSql = "SELECT Class_Name,Class_Code,Class_Instructor FROM classes WHERE Class_Name LIKE ?"; 
       var insertValues = [ 
        '%' + reqObj["className"] + '%' 
       ]; 
       var query = conn.query(insertSql, insertValues, function(err, result){ 
        if(err){ 
         console.error('SQL error: ', err); 
         return next(err); 
        } 
        var class_array = []; 
        for(var i=0; i<result.length; i++){ 
         class_array.push(result[i]); 
        } 
        console.log(class_array.valueOf()); 
        res.send([{ 
         info: 
          class_array.valueOf() 
        }]) 
       }); 
      } 
     }); 
    } 
    catch(ex){ 
     console.err("Internal error: " + ex); 
     return next(ex); 
    } 
}; 

同时,这是我对搜索前端代码。

公共/ Java脚本/ app.js

$scope.classFun = function(){ 
     console.log('clicked submit'); 
     $http({ 
      url: 'http://localhost:3000/grades', 
      method: 'POST', 
      data: $scope.data 
     }).then(function (httpResponse){ 
      console.log('response', httpResponse); 
      // console.log(Object.keys(httpResponse.data[0].info[0]).length); 
      var tbody = document.getElementById("class_list_data"); 
      while(tbody.firstElementChild){ 
       tbody.removeChild(tbody.firstChild); 
      } 
      for(var i=0; i<httpResponse.data.length; i++){ 
       for(var j=0; j<httpResponse.data[i].info.length; j++){ 
        var tr = document.createElement("tr"); 
        var td = document.createElement("td"); 
        td.appendChild(document.createTextNode(httpResponse.data[i].info[j].Class_Name.toString())); 
        tr.appendChild(td); 
        tbody.appendChild(tr); 
       } 
      } 
     }) 
    } 

我希望我正确表达我的问题,我真的希望你们能帮助我。

非常感谢!

+0

请考虑发布您的问题*代码审查*。 –

回答

0

你的代码只有一个问题,我不认为你需要回调函数,因为它没有给出任何有用的含义。

setTimeout(callback, 100); //it fires the callback after 100ms no matter what 

您不必担心多个客户端请求,因为每个请求都将在不同的范围内运行。

对于性能方面,使用MySQL字符串搜索和“LIKE”关键字在表格变大且索引不正确时非常缓慢。

+0

噢,好吧。所以这意味着原始代码工作得很好? – Michael

+0

基本上他们是一样的。 – iKoala

+0

噢,好吧。我在nodeJS中读到了这个多重请求,我认为它适用于这个算法......无论如何,非常感谢。毕竟,现在我知道我的原始代码没有任何问题。 (除了你提到的“LIKE”键)。我会解决它的。谢谢!干杯! – Michael