我是 Node.js 和 MongoDB 的新手,但我正在尝试找出如何最好地在 Node.js/MongoDB/Express 中实现 GET 端点
出于某种原因,我认为这是因为我的数据库是 Azure Cosmos MongoDB,我建立连接的唯一方法是使用
async
,因为我理解的同步数据库连接尝试会跳过任何其他代码,并且连接从未建立。
这是我到目前为止的代码:
const app = express();
app.get('/jobs', async (req, res) => {
var url = "mongodb://****************"
const client = new MongoClient(url);
await client.connect();
console.log("connected to database");<--This works!
const database = client.db("jobinfoaccount");<-This is the name of my Azure DB Resource
const query = {"jobrequests":"123"}
//jobrequests is the name of the collection in jobinfoaccount
var collection = database.collection("jobrequests").find().toArray(function (err,results) {
console.log(results);
res.json("Loaded" + results)
})
});
我目前遇到的问题是执行就在这条线上发生:
var collection = database.collection("jobrequests").find().toArray (function (err,results)
执行甚至没有达到这些行:
console.log(results);
res.json("Loaded" + results)
当我查看 VSCode 中的 watch 语句时,它说那里有一个 Promise,但我不知道如何处理这个:
当我在 Postman 中调用端点时,它只是旋转:
更新 当我尝试使用等待时,如下所示:
var collection = await database.collection("jobrequests").find().toArray (function (err,results) {
我仍然没有看到它到达下一个第 70 行,直接到达第 73 行:
但是收藏似乎已经兑现了承诺:
现在我想知道这些代码行之一是否有问题,特别是
jobinfoaccount
和jobrequests
const database = client.db("jobinfoaccount");
var collection = await database.collection("jobrequests").find().toArray (function (err,results) {
这是集合名称:
提前致谢..
尝试找出如何最好地在 Node.js/MongoDB/Express 中实现 GET 端点。
以下是我尝试在 Node.js/MongoDB/Express 中实现 GET 端点的步骤:
我尝试的代码在服务器启动时创建单个 MongoDB 连接,然后为每个请求重用它。它避免了为每个请求重复创建和关闭连接。
一致使用async/await使代码更易于理解,并以更好的方式处理异步任务。
通过使用
console.log(results)
语句将检索到的数据记录到控制台,然后将其作为响应传递,可以更轻松地调试和理解正在检索的数据。
我尝试了一些使用
try/catch
的代码来捕获和处理使用数据库时出现的任何错误。
下面的代码将接收到的数据作为 JSON 响应传输
(res.json(results))
,使客户端可以轻松操作数据。
为了更好的代码结构和可读性,下面的代码中将路由定义和 MongoDB 连接设置分开。
我尝试过的代码:
const express = require('express');
const { MongoClient } = require('mongodb');
const app = express();
const port = 3000;
const url = '****';
app.use(express.json());
const client = new MongoClient(url);
async function connectToDatabase() {
try {
await client.connect();
console.log('Connected to MongoDB');
} catch (error) {
console.error('Error connecting to MongoDB:', error);
}
}
connectToDatabase();
// Retrieve all data from the database
app.get('/jobs', async (req, res) => {
try {
const database = client.db('newDb');
const collection = database.collection('newColl');
const results = await collection.find().toArray();
console.log(results);
res.json(results);
} catch (error) {
console.error('Error:', error);
res.status(500).json({ error: 'An error occurred' });
}
});
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
输出: 在控制台中:
Server is running on port 3000
Connected to MongoDB
[
{
_id: new ObjectId("64f57a8e93de8d013cb645af"),
id: '1',
title: 'Job 1',
description: 'This is the first job',
location: 'New York'
},
{
_id: new ObjectId("64f57ab993de8d013cb645b0"),
id: '2',
title: 'Job 2',
description: 'This is the second job',
location: 'Los Angeles'
}
]
在服务器中:localhost:3000/jobs
[
{
"_id": "64f57a8e93de8d013cb645af",
"id": "1",
"title": "Job 1",
"description": "This is the first job",
"location": "New York"
},
{
"_id": "64f57ab993de8d013cb645b0",
"id": "2",
"title": "Job 2",
"description": "This is the second job",
"location": "Los Angeles"
}
]