Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.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
Jquery 运行Mongoose finds时执行ajax调用时如何处理Node.js_Jquery_Ajax_Node.js_Express_Mongoose - Fatal编程技术网

Jquery 运行Mongoose finds时执行ajax调用时如何处理Node.js

Jquery 运行Mongoose finds时执行ajax调用时如何处理Node.js,jquery,ajax,node.js,express,mongoose,Jquery,Ajax,Node.js,Express,Mongoose,我正在用node、express和mongoose构建一个简单的测试应用程序。我的问题是理解如何处理node? 下面的函数是通过clientside的标准$.ajax调用调用的,我不理解的是第111行,我需要执行一个查找操作,但该操作是异步的,因此结果不可用,当Mongo的查找结果就绪时,我们将在第112行得到一个回调,但是在这个函数的底部我该怎么做呢?当我等待搜索结果时,我应该使用下一个勾号函数吗 我环顾四周,我确信答案已经在那里了,但我就是找不到,而且我认为我对node.js的解释很差,所以

我正在用node、express和mongoose构建一个简单的测试应用程序。我的问题是理解如何处理node? 下面的函数是通过clientside的标准$.ajax调用调用的,我不理解的是第111行,我需要执行一个查找操作,但该操作是异步的,因此结果不可用,当Mongo的查找结果就绪时,我们将在第112行得到一个回调,但是在这个函数的底部我该怎么做呢?当我等待搜索结果时,我应该使用下一个勾号函数吗

我环顾四周,我确信答案已经在那里了,但我就是找不到,而且我认为我对node.js的解释很差,所以请原谅我,我相信你知道我在问什么

exports.loginAuthenticate = function(mongoose){
  96     return function(req, res){
  97         var error = { errorCode: 0, errorMessage:"No error" };
  98 
  99         if(req.body.Username==null || typeof req.body.Username=="undefined" || req.body.Username.length==0){
 100             error.errorCode=1;error.errorMessage="You MUST specify a username before attempting to login.";
 101         }
 102         if(req.body.Password==null || typeof req.body.Password=="undefined" || req.body.Password.length==0){
 103             error.errorCode=1;error.errorMessage="You MUST specify a password before attempting to login.";
 104         }
 105 
 106         if(error.errorCode!=0){ res.send(error); return; }
 107 
 108         mongoose.connect("mongodb://localhost/nm", function(err){
 109 
 110             var client = mongoose.model("Client");
 111             client.findOne({ Username: req.body.Username }, "Password", function(err, found){
 112                 if(err){
 113                     console.log("findOne -> Error!");
 114                     return;
 115                 }
 116 
 117                 if(found!=null){
 118                     if(req.body.Password!=found._doc.Password){
 119                         error.errorCode=1;
 120                         error.errorMessage="Sorry your username or password is invalid.";
 121                     }
 122                 }
 123                 else{
 124                     error.errorCode=1; // Did not find the user within the system
 125                 }
 126                 res.send(error);
 127                 return;
 128             });
 129 
 130         });
 131 
 132     return;
 133     };
 134 };

您的代码应该按预期工作-使用
res.send()
发回结果-错误、成功或任何您想要的结果。它也可以是异步的,因此将
res.send()
嵌套在
findOne()
代码中将按照您所期望的正确顺序响应


在函数的末尾,不需要返回任何内容

代码有一个问题:在第112行,如果发生错误,您只需
console.log
并返回。那是不对的

使用Express,即使发生错误,您也必须通过发回响应来结束当前请求。否则,请求将永远不会结束,并且看起来像是在拖延。因此,处理Express app中错误的一种方法是返回HTTP 500响应:

if (err) {
  console.log("findOne -> Error!");
  return res.send(500, 'An error has occurred!');
}

否则,正如@JoshB所指出的,它应该可以工作。

感谢在我试图理解node的执行周期时,任何有建设性的东西都是伟大的,再次感谢!Chers Josh信息很好谢谢你抽出时间我真的很感激。谢谢