运行 Mongoose 时执行 ajax 调用时如何处理 Node.js 发现
Posted
技术标签:
【中文标题】运行 Mongoose 时执行 ajax 调用时如何处理 Node.js 发现【英文标题】:How handle Node.js when performing ajax calls when running Mongoose finds 【发布时间】:2013-10-26 12:52:51 【问题描述】:我正在使用 node、express 和 mongoose 构建一个简单的测试应用程序。我的问题是了解我应该如何处理节点? 下面的函数是通过来自客户端的标准 $.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 ;
【问题讨论】:
【参考方案1】:您的代码应该按预期工作 - 您使用 res.send()
发送回结果 - 错误、成功或任何您想要的。它也可以是异步的,因此将res.send()
嵌套在findOne()
代码中将按照您期望的正确顺序响应。
在函数结束时,不需要返回任何东西。
【讨论】:
Chers Josh 信息非常好,感谢您抽出宝贵的时间,我真的很感激。谢谢!【参考方案2】:您的代码有一个问题:在第 112 行,如果发生错误,您只需 console.log
并返回。这是不对的。
使用 Express,您始终必须通过发回响应来结束当前请求,即使发生错误也是如此。否则,请求将永远不会结束,并且看起来像是在停止。因此,在 Express 应用中处理错误的一种方法是返回 HTTP 500 响应:
if (err)
console.log("findOne -> Error!");
return res.send(500, 'An error has occurred!');
否则,正如@JoshB 指出的那样,它应该可以工作。
【讨论】:
感谢在我试图了解节点的执行周期时任何有建设性的事情都很棒,再次感谢!以上是关于运行 Mongoose 时执行 ajax 调用时如何处理 Node.js 发现的主要内容,如果未能解决你的问题,请参考以下文章