gpt4 book ai didi

mongodb get/post 挂起(或者太慢以至于挂起)

转载 作者:可可西里 更新时间:2023-11-01 10:25:58 26 4
gpt4 key购买 nike

我继续快速地研究 mongoose/mongodb/express/node 应用程序。今天,这是终极慢速笼比赛。我们说的是蜗牛会羞于走得这么慢。我已经查看了涉及缓慢/挂起的 mongodb 答案,但与我的案例相比,这些示例要么非常庞大,要么非常复杂。这可能意味着我遗漏了一些非常简单的东西来修复它。我只是不知道是什么。

我有三个合集,其中的条目都不超过 100 个。最大的集合有 200 多个变量。我通过基本的 html 表单从用户那里获取值并将其全部作为 put 提交:

    router.route('/items/:user_id/:item_id')
// update
.put(function(req, res) {
var item = req.body;
var id = req.params.item_id;
Items.update({_id: id}, item, function(err, item) {
if (err)
res.send(err);
});
})

完成后,我将用户重新路由到显示整个文件的页面,并通过在上述操作之后立即继续的获取来填充它:

        // view
.get(function(req, res) {
var id = req.params.item_id;
Items.find({'_id':id},function(err, item) {
if (err)
res.json(err);
res.send(item);
});
})

但是,它并没有像您期望的那样通过微型数据库和极小的更新(相对而言)变得非常好和快速,而是令人讨厌地挂起。当我查看 Chrome 中的“网络”选项卡时,它说 PUT 已停止,甚至没有指示完成。紧随其后的 GET 也挂起,大约 20 秒,然后(终于!)页面填充了更新的信息。

(好吧,有时。有很多次 PUT 似乎从未通过,所以 GET 显示未更改的信息。唉。)

我确实遇到过一个教程,它说 res.send 包含一个 res.end,因此您不必执行两次,但唯一的 res.send 是在出现错误时。我尝试将 res.end() 添加为每个中的最后一位,但随后出现错误,提示我在发送后无法写入 header 。但我的一般怀疑是我需要一些东西来告诉 PUT 它已经完成了。

问题是 PUT 没有正式结束吗?如果是,我应该添加什么才能使其不出错而直接结束?或者我应该在 PUT 和 GET 之后,在 router.route 调用的底部做一​​个 res.end() 吗?或者我应该将两者分成单独的 router.route 调用吗?或者我应该在模型中跟踪多少项目有限制吗?我不知道,所以我把自己交给了你们这些 Mongoose 之神的怜悯。

非常感谢!

最佳答案

关于 PUT 命令未终止,您是在正确的轨道上。发生的事情是代码正在处理 put,并且在它成功后运行回调。但它只有处理错误的代码,所以这就是您看到挂起的原因。

router.route('/items/:user_id/:item_id')
// update
.put(function(req, res) {
var item = req.body;
var id = req.params.item_id;
Items.update({_id: id}, item, function(err, item) {
if (err)
**return** res.send(err);
**res.status(200).end();**
});
})

在获取方面,您肯定会问当前代码的问题,因为您有两个发送一个接一个

    .get(function(req, res) {
var id = req.params.item_id;
Items.find({'_id':id},function(err, item) {
if (err)
**return** res.json(err);
res.send(item);
});
})

关于mongodb get/post 挂起(或者太慢以至于挂起),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33968420/

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