我不明白为什么会出现此错误。这是我的控制器:
export const createProductReview = async (req, res) => {
const { rating, comment } = req.body;
const product = await Product.findById(req.params.id);
if (product) {
const alreadyReviewed = product.reviews.find(
r => r.user.toString() === req.user.userId.toString()
);
if (alreadyReviewed) {
throw new NotFoundError('Product already reviewed');
}
const review = {
user: req.user.userId,
name: req.user.username,
rating: Number(rating),
comment,
};
product.reviews.push(review);
product.numOfReviews = product.reviews.length;
product.rating =
product.reviews.reduce((acc, item) => item.rating + acc, 0) /
product.reviews.length;
await product.save();
res.status(StatusCodes.OK).json({ message: 'Review added', review });
} else {
throw new NotFoundError('Product not found');
}
};
这是我的productPage,我在其中分派addProductReview并从params和review对象传递产品ID:
const [rating, setRating] = useState(0);
const [comment, setComment] = useState('');
const submitHandler = e => {
e.preventDefault();
dispatch(
addProductReview(id, {
rating,
comment,
})
);
};
这是我的产品切片:
export const addProductReview = createAsyncThunk(
'product/review',
async (id, { review }, thunkAPI) => {
try {
const { data } = await axios.post(
`/api/v1/products/${id}/reviews`,
review
);
return data;
} catch (error) {
const message = error.response.data.msg;
return thunkAPI.rejectWithValue(message);
}
}
);
我不知道为什么我得到了错误路径注解是必需的。我通过审查对象的路线。
1条答案
按热度按时间vlju58qv1#
问题出在Thunk
payloadCreator
中使用的参数。从the documentation ...将使用两个参数调用
payloadCreator
函数:arg
:单个值,包含在调度thunk操作创建者时传递给该创建者的第一个参数。这对于传递请求中可能需要的项ID等值非常有用。如果需要传递多个值,请在调度thunk时将它们一起传递到一个对象中,如dispatch(fetchUsers({status: 'active', sortBy: 'name'}))
。thunkAPI
:包含通常传递给Redux thunk函数的所有参数以及附加选项的对象您的
payloadCreator
有三个参数,这是不正确的。试试这个
像这样发送