데이터 등록 관련해서 질문있습니다.
172
0
항상 감사드립니다.
강의 응용해서 개인적인 웹사이트를 만들고 있는데

이렇게 동적으로 데이터 행을 여러개 만든후에
배열로 이루어진 데이터를 db로 보내려고 하는데
이상하게 첫번째 데이터만 db에 등록이 되네요.
프론트:
const onSubmit = useCallback((e) => {
e.preventDefault();
console.log("formData", formData);
// 유효성: category 또는 src가 비어있을 경우 에러메시지 return
// formData.append('src', src);
// formData.append('category', category);
// for (var pair of formData.entries()) {
// console.log(pair[0], pair[1]);
// }
// return (
dispatch({
type: UPDATE_WEBSITE_REQUEST,
data: formData,
})
// )
// formData.map(p => (
// dispatch({
// type: UPDATE_WEBSITE_REQUEST,
// data: p,
// })
// ))
setIsWebModalVisible(false)
}, []);
리덕스
export const initialState = {
websites: [],
updateWebsiteLoading: false,
updateWebsiteDone: false,
updateWebsiteError: null,
}
case UPDATE_WEBSITE_SUCCESS:
draft.updateWebsiteLoading = false;
draft.updateWebsiteDone = true;
draft.websites = action.data;
break;
case ADD_WEBSITE_TO_ME: // reducers/user에서
draft.me.Websites = action.data;
break;
saga
function* updateWebsite(action) {
try {
// result.data로 (call: 첫번째인자 함수실행, 두번째인자를 넣어서)
const result = yield call(updateWebsiteAPI, action.data);
// ContentType:'application/json'
console.log(action.data);
// id를 생성해서 post와 user리덕스 연결고리
// 어떤 액션이 여러 리듀서의 데이터를 동시에(user, post)바꿔야한다면 여러 액션을 호출해주면 됨
yield put({
type: UPDATE_WEBSITE_SUCCESS,
data: result.data,
// 포스팅에 글 입력한 내용
});
yield put({
type: ADD_WEBSITE_TO_ME,
data: result.data.id,
});
} catch (err) {
console.error(err);
yield put({
type: UPDATE_WEBSITE_FAILURE,
error: err.response.data,
});
}
}
DB
module.exports = class Website extends Model {
static init(sequelize) {
return super.init({
src: {
type: DataTypes.STRING(200),
allowNull: false,
},
// @ 카테고리: git, facebook 등
category: {
type: DataTypes.TEXT,
allowNull: false,
},
}, {
modelName: 'Website',
tableName: 'websites', // 테이블명: 자동으로 소문자에 복수 붙음
charset: 'utf8mb4',
collate: 'utf8mb4_general_ci', // 이모티콘 저장
sequelize,
})
}
static associate(db) {
db.Website.belongsTo(db.User)
}
}
routes
router.post('/', isLoggedIn, async (req, res, next) => { // 주소: Website /post
try {
const exWeb = await Website.findOne({
where: { UserId: req.user.id, }
});
if (exWeb) {
await Website.destroy({
where: { UserId: req.user.id, },
})
}
const user = await User.findOne({ id: req.user.id, })
const web = req.body;
if (Array.isArray(web)) {
const results = await Promise.all(web.map((p) =>
Website.create({
src: p.src, category: p.category, UserId: req.user.id
})
));
console.log(JSON.stringify(results));
await user.addWebsites(results.map((v) => v[0])); // 게시글 post create에 추가
}
const fullInfo = await Website.findAll({
where: { UserId: req.user.id },
// include: [{
// model: User, // 게시글 작성자
// attributes: ['id', 'nickname'],
// },]
})
// 다시 frontend로 전송
console.log(fullInfo);
res.status(201).json(fullInfo);
} catch (error) {
console.error(error);
next(error);
}
})
이렇게 작성했는데 아무레도 routes에서 문제가 있는 것 같은데 어렵네요.
기존에 등록된 유저의 website 데이터를 일괄 제거한 뒤
문제 1. 배열내에 모든 데이터가 등록되어야하는데 첫번째 데이터만 db에 등록됩니다.
문제 2. add website to me 관련내용은 아예 등록되지도 않습니다.

해결방법이 있을까요? ㅠㅠ
복잡한 질문해서 죄송합니다.
답변 3
0
saga에서 data: result.data.id, --> data: result.data
로 변경해서 해결되었습니다 감사합니다^^
0
감사합니다. 희안하게 callback함수에다 dependancy 값들을 넣어주고난 후에
데이터가 정상적으로 들어오네요


근데 ADD_WEBSITE_TO_ME 에는 여전히 데이터가 들어오지 않네요.
await user.addWebsites(results.map((v) => v[0]));
routes에서 이 값이 잘못된건지 아님 다른 문제인지 모르겠습니다.(ADD_POST_TO_ME와 유사하게 만들었어요)
0
네트워크탭에서 response 확인해보세요. 그리고 result.data도요
0
서버쪽에서는 req.body 콘솔로그찍어보시고
saga에서는 result.data 찍어보세요.
넥스트 버젼 질문
로그인시 401 Unauthorized 오류가 뜹니다
무한 스크롤 중 스크롤 튐 현상
특정 페이지 접근을 막고 싶을 때
createGlobalStyle의 위치와 영향범위
인라인 스타일 리렌더링 관련
vsc 에서 npm init 설치시 오류
nextjs 15버전 사용 가능할까요?
화면 새로고침 문의
RTK에서 draft, state 차이가 있나요?
Next 14 사용해도 될까요?
next, node 버전 / 폴더 구조 질문 드립니다.
url 오류 질문있습니다
ssh xxxxx로 우분투에 들어가려니까 port 22: Connection timed out
sudo certbot --nginx 에러
Minified React error 콘솔에러 (hydrate)
카카오 공유했을 때 이전에 작성했던 글이 나오는 버그
프론트서버 배포 후 EADDRINUSE에러 발생
npm run build 에러
front 서버 npm run build 중에 발생한 에러들
서버 실행하고 브라우저로 들어갔을때 404에러
css 서버사이드 랜더링이 적용되지 않아서 문의 드립니다.
팔로워 3명씩 불러오고 데이터 합쳐주는걸로 바꾸고 서버요청을 무한으로하고있습니다.
해시태그 검색에서 throttle에 관해 질문있습니다.