【发布时间】:2019-10-14 00:58:43
【问题描述】:
我有这个,但我无法让它工作。 Console.log 记录为空。 如果我在更新代码之前登录,它实际上会记录我试图编辑的项目。如果我在 findOneAndUpdate() 之后执行此操作,它将返回 null。
编辑2:
我将 mongoose 方法更改为 findById 并且它起作用了。不过还是有一个问题。新代码:
let promo = await Promo.findById(req.body._id)
console.log('Promo findById(promoId) => ' + promo)
console.log('Promo Fields => ' + JSON.stringify(promoFields))
if (promo) {
// Update
const promo = await Promo.findOneAndUpdate(
{ promo: req.body_id },
{ $set: promoFields },
{ new: true },
(err, doc) =>
console.log(err + ' <--- err ///// ' + doc + ' <--- doc ')
)
return res.json(promo)
输出:
[0] Promo findById(promoId) => { _id: 5cee8b0134349e1eec482053,
[0] title: 'Dos',
[0] subtitle: 'dos',
[0] desc: 'dos',
[0] __v: 0 }
[0] Promo Fields => {"title":"Dos","subtitle":"dos","desc":"dos"}
[0] null <--- err ///// { _id: 5cee6bcbcfd3f11d580aa715,
[0] new: false,
[0] desc: 'dos',
[0] subtitle: 'dos',
[0] title: 'Dos' } <--- doc
现在的问题是,无论我编辑列表中的哪个项目,它总是会更新第一个项目。会不会是id不匹配?如果我从 req 调试 id,我从所选项目中获得了正确的 id。不知道它为什么会这样。 最后但并非最不重要的是减速器:
const initialState = {
promos: null
}
export default function(state = initialState, action) {
const { type, payload } = action
switch (type) {
case POST_PROMOS:
return {
...state,
...payload,
loading: false
}
default:
return state
}
}
我想知道我是否可以在 reduce 中制作类似
state.promos.filter(promo => promo._id !== payload)
然后使用有效负载项生成一个新数组。我在混合概念?
提前谢谢你
【问题讨论】:
-
promoFields指的是什么? -
我的坏@developing2020,已经编辑过。
-
我读到它在更新之前记录了该项目。那么你可以在 findOne 之后添加 console.log(promo) 的输出吗?
-
@JackRed 如果我在
if(promo){行之前运行它,它会记录实际项目 -
@JackRed 并且如果我
return res.json(promo), console.log(promo)都在同一行中,然后记录它,它会保持为空