【发布时间】:2021-07-01 00:18:28
【问题描述】:
我正在尝试从我的后端返回一个组件上的用户列表,但我无法将我的用户 ID 参数传回。我正在使用 useEffect 从 Redux 中提取数据,然后使用我认为声明的参数调用组件上的操作。据我所见,正确的用户 ID 被正确传递,但是我认为当路由传递参数时会发生错误。
在我的操作中,我应该如何传递我想要获取数据的用户 ID 的参数?我有 console.log param.id/param.userID/userID 等。在组件中我有 user.userID(来自 useSelector)但是在操作文件夹中我不知道如何将它传递给后端。
另外在后端我是否总是必须将我的参数设置为 id?这些可以与前端的值具有相同的名称,例如“userID”吗?我似乎只能让后端 Postman 调用使用 :id。
组件
const user = useSelector(state => state.auth.user);
const [userDiveLog, setUserDiveLog] = useState({
user: [],
userDiveLogList: [],
expanded: false
})
// get access to dispatch
const dispatch = useDispatch();
useEffect(() => {
dispatch(fetchUserDiveLog(user.userID));
}, []);
动作
// pulls the user dive log
export function fetchUserDiveLog(params, credentials, diveLogUserList){
return function(dispatch){
return axios.get("http://localhost:5002/api/divelog/userdiveloglist/" + params.userID)
.then(({data}) => {
dispatch(userDiveLogList(data));
});
};
}
后端
路线
// return an individual dive log
app.get('/api/divelog/userdiveloglist/:userID', controller.userDiveLog);
控制器
exports.userDiveLog = (req, res, params, userID) => {
try {
const userID = req.params.userID
diveLog.findAll({
include: {all: true},
where: {diverUserNumber: userID}
})
.then(diveLog => {
const userDiveLogList = [];
for (i = 0; i < diveLog.length; i++) {
userDiveLogList.push(diveLog[i].dataValues);
}
if (!userDiveLogList) {
return res.status(404).send({message: "No dive logs belonging to this user"});
}
res.status(200).send({
data: userDiveLogList
})
})
} catch(err) {
res.status(500).send({
message: "Error retrieving dive log belonging to user id= " + id
});
}
};
【问题讨论】:
标签: node.js reactjs ajax express parameters