node.js - Mongoose 在数据库中创建一个新文档,但在生产中不获取更新的集合
问题描述
我有一个 MERN 堆栈应用程序,在服务器端,我为数据库创建了一个新文档,它工作正常(我在 Mongocompass 中检查它)。但是,在获取此数据时,即使新保存的文档出现在数据库中,我也没有得到带有响应的新保存文档。例如,我在 db 中有 [1,2,3],我创建了一个新文档,4。实际的 DB 是 [1,2,3,4],但是在获取时它是 [1,2,3] .
问题是,这个问题只发生在生产中,我将我的服务器托管在 Dreamhost 的共享托管服务中。在本地主机中一切正常,甚至在 Heroku 中也能正常工作。
我主机上的 Node.js 版本:12.18.3 我机器上的 Node.js 版本:14.15.3 mongoose 版本:5.12.7
这是我的代码:创建一个新文档:
router.post('/upload', async(req, res) => {
const path = `${__dirname}/../static`
const file = req.files.file;
const newProduct = new Product({
...req.body,
imageSrc: `${file.name}`,
cardDetails: req.body.description,
})
let error = false
file.mv(`${path}/${file.name}`, err => {
if (err) {
console.log('error downloading');
console.error(err);
error = err
}
});
if(error) {
return res.status(500).send(error)
};
try{
await newProduct.save()
await Category.findOneAndUpdate({title: req.body.category}, {
$addToSet: {products: newProduct._id}
})
} catch(err){
if (err) return res.json({message: err})
}
res.json({ fileName: file.name, filePath: `/uploads/${file.name}`, message: 'Done' });
});
获取产品:
router.get('/', async(req, res) => {
const response = await Product.find({})
res.send(response)
})
我注意到只有在从数据库中删除一个文档后,它才会更新并获取最新的集合,删除函数是:
router.delete('/', async(req, res) => {
const { _id, category } = req.body
const prod = await Product.findById(_id)
await Product.findByIdAndDelete(_id)
await Category.findOneAndUpdate(
{title: category}, {$pull: { products: mongoose.Types.ObjectId(_id)}}
)
res.send({status: 'ok'})
})
问题修正:原来问题不在于猫鼬,实际上是浏览器缓存。在这个问题的帮助下修复: No cache in Node.js server。尽管如此,我还是不明白为什么在 Heroku 和本地主机中部署时都没有缓存。
解决方案
可用选项
new: bool - 如果为真,则返回修改后的文档而不是原始文档。默认为 false(在 4.0 中更改)
解决方案 如果您希望在 doc 变量中更新结果,则传递 {new: true}
推荐阅读
- javascript - 如何使我的导航栏适合 100% 的网站高度
- objective-c - Persistent error with contradictory textureUsage in Metal?
- graphql - 如何在 AppSync GraphQL 架构中使用自定义输入类型?
- bluetooth - 使用 gatttool 从蓝牙温度计读取数据
- r - 在列和 if_else 上使用 mutate 和 starts_with
- c++ - 文件可读但以二进制模式保存
- android - 使用 Kotlin 读取 Android SQLite 数据库时出错
- json - 将值添加到 Spark DataFrame 列中的现有嵌套 json
- python-3.x - matplotlib 在小图的对数轴上强制更密集的主要刻度
- python - 脚本问题 - 如果条件不满足,j += 1,一旦条件满足,j = 0,i += 1