gpt4 book ai didi

node.js - Node/Express API 上的连接之间的数据持续存在

转载 作者:太空宇宙 更新时间:2023-11-04 01:19:14 25 4
gpt4 key购买 nike

我正在构建 MongoDB 的 Node/Express API 前端,对于单个连接来说一切正常,但对于 2 个或更多连接则不行。

如果我同时使用 2 个连接调用 API,则被调用函数中的数据会损坏。代码摘录:

// This is the Express entry point
app.get('/user', async (request, response) => {
const readResp = await read(request)
response.send(readResp)
})


// The called function
async function read(request) {
//
try {

// This gets data from MongoDB via Mongoose
var connections = await Connection.find()

// Do other stuff here with connections,
// but part-way through the connections
// variable gets corrupted as the new request has come in

return { error: { code: 0, message: 'OK' }, connections: connections }
} catch (error) {
Log.errorToConsoleAndClose(error)
}
}

我使用express来等待传入请求,触发read()函数并返回响应。

当第二个请求同时传入时,问题就出现了,因为它似乎没有使用 read() 的新实例,而是我的代码在某些时候失败,因为 var 连接 由新的传入请求重置。

任何线索/帮助将不胜感激。

最佳答案

我在使用异步的其他数据库中遇到了类似的情况

解决方案是在异步请求之外创建连接,以便使其保持打开状态,然后通过 .

发生的事情是每次调用异步时都会重置连接并且未完成请求

解决方案之一是使用 .thenpromises

这是使用 Promise 的示例。

  router.post('/api/get_data', (req, res, next) => {
try {
MongoClient.connect(connectionStr, mongoOptions, function(err, client) {
assert.equal(null, err);
const db = client.db('db');

//Step 1: declare promise

var myPromise = () => {
return new Promise((resolve, reject) => {

db
.collection('your_collection')
.find({id: 123})
.limit(1)
.toArray(function(err, data) {
err
? reject(err)
: resolve(data[0]);
});
});
};

//Step 2: async promise handler
var callMyPromise = async () => {

var result = await (myPromise());
//anything here is executed after result is resolved
return result;
};

//Step 3: make the call
callMyPromise().then(function(result) {
client.close();
res.json(result);
});
}); //end mongo client


} catch (e) {
next(e)
}
});
module.exports = router;

有关该主题的更多信息可以在 Async MongoDB 找到

关于node.js - Node/Express API 上的连接之间的数据持续存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59914775/

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