gpt4 book ai didi

javascript - 如何在客户端 nodejs 处理异步请求?

转载 作者:行者123 更新时间:2023-11-30 09:52:08 26 4
gpt4 key购买 nike

我是 NodeJS 的新手。我在服务器端使用 NodeJS。我正在尝试发出一个简单的基于 REST 的 GET 请求,该请求从用户那里获取搜索参数 searchvar 并返回在 JSON 数组中找到的匹配记录。我的服务器代码如下:

var express = require('express');
var app = express();
var MongoClient = require('mongodb').MongoClient;
var assert = require('assert');
var ObjectId = require('mongodb').ObjectID;
var url = 'mongodb://localhost:27017/mydb';

app.get('/search', function(req, res) {
res.set({ 'content-type': 'application/json; charset=utf-8' });
res.header("Content-Type", "application/json; charset=utf-8");
res.charset = 'utf-8';

var searchvar = req.query.searchvar;

if(searchvar != null) {
var recordsArray = new Array();
console.log("searchvar :: " + searchvar );

MongoClient.connect(url, function(err, db) {
var cursor = db.collection('myCollections').find({"name": new RegExp(searchvar)});
cursor.each(function(err, doc) {
//assert.equal(err, null);
if (doc != null) {
var tempObject = {"name": doc.name, "cat": doc.cat};
recordsArray.push(tempObject);
console.dir(doc);
} else {
db.close();
}
});

if(recordsArray.length > 0) {
console.log("if........");
res.json({"status": "SUCCESS", "message": "The request processed successfully.", "records":recordsArray});
} else {
console.log("else........");
res.json({"status": "FAILURE", "message": "No records found corresponding to given search query."});
}
});
} else {
res.json({"status": "FAILURE", "message": "The searchvar is missing."});
}

//res.send('id: ' + req.query.id);
});

app.listen(3000);

当我在具有以下 URL 的浏览器中使用 RESTClient 调用它时:

http://localhost:3000/search?searchvar=aa

我得到以下响应:

{"status": "FAILURE", "message": "No records found corresponding to given search query."}

这是一个异步调用。我想知道服务器中的进程,我可以使用它在处理完成后返回响应并在客户端处理这个异步响应。提前致谢。

最佳答案

响应的发生是因为 if 检查:

if(recordsArray.length > 0) {
console.log("if........");

在传递给 cursor.each 方法的回调完成其处理之前执行。结果,数组为空。

建议的解决方案
cursor.forEach方法采用异步执行的回调函数。这意味着您只能在回调本身内访问回调的执行结果(除非您返回一个 Promise 对象)。解决办法是:

cursor.forEach(function(doc) {
if (doc != null) {
var tempObject = {"name": doc.name, "cat": doc.cat};
recordsArray.push(tempObject);
console.dir(doc);
}
}, function(err) {
if(recordsArray.length > 0) {
console.log("if........");
res.json({"status": "SUCCESS", "message": "The request processed successfully.", "records":recordsArray});
} else {
console.log("else........");
res.json({"status": "FAILURE", "message": "No records found corresponding to given search query."});
}
db.close();
});

关于javascript - 如何在客户端 nodejs 处理异步请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35917942/

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