javascript - Mongo:db.collection.findOne() 问题
问题描述
我正在尝试实现 Like 路线。当用户通过身份验证并想要喜欢另一个用户(尖叫)的帖子时,在 MongoDb 中应该使用以下参数在“喜欢”集合中创建一个文档:
1.screamId == 帖子的 ID
2.name == 用户谁喜欢这篇文章。
之后,该帖子的likeCount 增加1,然后将该帖子保存在数据库中。
我对 .find / .findOne 方法有疑问,因为我想检查帖子是否已被该用户喜欢。
我想实现一个条件,如果 likeDoc 已经存在,它应该返回“已经喜欢...”
// 使用 .find 方法,likeCount 正在增加(一切都很酷),但是检查 likeDoc 是否已经存在的条件不起作用,它每次都会创建具有相同screamId 和名称的新文档。
使用 .findOne 方法,我收到此错误:
(node:12240) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'name' of null at C:\Users\Marius\Desktop\my-app\back-end\routes\likes.js :20:11
您能否提供一些修复此错误的提示?
const router = express.Router();
const auth = require("../middleware/auth");
const { Scream } = require("../models/scream");
const { Like } = require("../models/like");
router.get("/:id", auth, async (req, res) => {
const scream = await Scream.findById(req.params.id);
if (!scream)
return res
.status(404)
.send("The scream with the given ID was not found...");
doc = await Like.findOne({
screamId: req.params.id,
name: req.user.name,
});
if (doc.name === req.user.name)
return res.status(400).send("The scream is already liked");
doc = new Like({
screamId: req.params.id,
name: req.user.name,
});
scream.likeCount++;
await scream.save();
await doc.save();
res.send(doc);
});
module.exports = router;
解决方案
req.user.name 不是有效的参数。检查您在 req 中传递名称参数的位置。理想情况下,它应该是 req.body.name 或 req.params.name。
推荐阅读
- amazon-web-services - 我可以连接到多可用区 RDS 数据库实例的辅助数据库服务器吗?
- typescript - 合并 Socket.IO 的 TypeScript 接口声明不起作用
- reactjs - 尝试“读取”firebase 数据并将其呈现在 ReactJS 上
- reactjs - 定义不带样式组件的 CSS 变量
- django - 注释来自过滤的相关对象的值——案例、子查询或其他方法?
- idl - 在 IDL 中使用 IDLgrClipBoard 时,MacO 能否正确显示图像?
- angular - 延迟 *ngIf 语句
- sql - 需要通过连接 Oracle DB 中的多个表来创建空表
- html - 在某些缩放级别将绝对定位的 div 对齐 1px
- javascript - 如何将全日历视图设置为在当前日期前 1 周开始?