Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.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
Javascript 如何将常见mongodb查询修改为与try-and-catch异步_Javascript_Node.js_Mongodb_Express - Fatal编程技术网

Javascript 如何将常见mongodb查询修改为与try-and-catch异步

Javascript 如何将常见mongodb查询修改为与try-and-catch异步,javascript,node.js,mongodb,express,Javascript,Node.js,Mongodb,Express,这是我用expressjs编写的代码 此查询有效,但我认为使用异步比此查询更可靠 const MongoClient=require('mongodb')。MongoClient; const assert=require('assert'); 常量url=”mongodb://localhost:27017/nodejs_crud"; const db_n=“nodejs_crud” const client=new MongoClient(url,{useUnifiedTopology:tr

这是我用expressjs编写的代码 此查询有效,但我认为使用异步比此查询更可靠

const MongoClient=require('mongodb')。MongoClient;
const assert=require('assert');
常量url=”mongodb://localhost:27017/nodejs_crud";
const db_n=“nodejs_crud”
const client=new MongoClient(url,{useUnifiedTopology:true});
app.get(“/”,异步(req,res)=>{
//这是结果正确的myquery代码
客户端连接((错误)=>{
assert.equal(null,err);
const db=client.db(db\u n)
db.collection(“list”).find({}).toArray((err,result)=>{
if(err)抛出res.send({状态:“反应数据时出错”,bool:false})。状态(450);
res.send(结果)。状态(200);
})
})    
});

我没有测试过这一点,但可以尝试以下方法:

const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
const url = "mongodb://localhost:27017/nodejs_crud";
const db_n = "nodejs_crud"

let client;

const getDb = async () => {
  // If we don't have a client, create one.
  if (!client) client = new MongoClient(url, { useUnifiedTopology: true });
  // If we are not connected, then connect.
  if (!client.connected()) await client.connect();
  // Get our database
  return client.db(db_n);
}

app.get("/", async (req, res) => {
  try {
    const db = await getDb();
    const results = await db.collection("list").find({}).toArray();
    res.send(result).status(200);
  } catch (err) {
    res.send({ status: "Error when react data", bool: false}).status(450);
  }
});

试试这个,和你的不完全一样,但是会让你知道如何使用async/wait和Try/catch

const MongoClient=require('mongodb')。MongoClient;
常量url=”mongodb://localhost:27017/nodejs_crud";
const db_n=“nodejs_crud”
const client=new MongoClient(url,{useUnifiedTopology:true});
app.get('/',异步(req,res)=>{
//连接未连接的客户端
如果(!client.isConnected()){
等待client.connect();
//您还可以捕获连接错误
试一试{
等待client.connect();
捕捉(错误){
返回res.status(500.send();
}
}
const db=client.db(db\n);
试一试{
//运行查询
const result=db.collection(“list”).find({});
res.json(wait result.toArray());
}捕捉(错误){
//抓住任何错误
控制台日志(错误消息);
res.status(450.send();
}
});

我看不出OP在哪里循环结果?你是对的,toArray不是forEach…我看错了。他返回了完整的数组。@ChrisG将来在推荐代码审阅时请使用可疑的措辞并链接到帮助中心。注意,“这可能是关于代码审阅的主题。请在发布之前检查和。”