gpt4 book ai didi

javascript - NodeJS 和用于搜索查询的嵌套函数

转载 作者:行者123 更新时间:2023-11-28 05:18:40 25 4
gpt4 key购买 nike

又是美好的一天, friend 们!

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

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

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

我认为这不是一个好的算法概念,因为我正在考虑一个场景,多个用户将访问 app.post() 方法,并且可能会导致某种我不知道的问题。

所以现在,我在想是否可以利用带有回调和超时的嵌套函数。我无法再清楚地描述这一点,所以我只是将代码粘贴进去。

我的 route 的原始代码:

routes/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);
}
});
<小时/>

现在,我修改了上面的 paths/grades.js 中的代码,使其更有意义(我认为哈哈),并且它可以正常工作,没有任何错误。但是,我仍然想知道这些代码中哪一个有更好的算法,或者它们是否都很糟糕。哈哈

routes/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);
}
};
<小时/>

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

public/javascripts/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);
}
}
})
}
<小时/>

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

非常感谢!

最佳答案

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

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

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

就性能而言,当表变大且索引不正确时,使用带有“LIKE”关键字的 MySQL 字符串搜索会非常慢。

关于javascript - NodeJS 和用于搜索查询的嵌套函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40759679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com