express에서 특정 단추를 눌렀을 때, mysql 데이터를 수정한 후, 수정된 페이지가 로드되도록 하고 싶습니다.
조회수 708회
main.js
app.post('/count', function(req, res){
var num_ = Object.keys(req.body)[0];
var sql = 'select times from db where num=?'
conn.query(sql, [num_], function(err, rows){
if(err){
console.log(err);
res.status(500).send('Internal Server Error');
} else{
var times_ = rows[0].times
var sql='update db set times=? where num=?';
conn.query(sql, [times_+1, num_], function(err, rows_){
if(err){
console.log(err);
res.status(500).send('Internal Server Error');
} else {
}
})
}
})
})
output.jade
form(action='/count' method='post')
input(type='submit', value='+', name=i.num, onclick='window.location.reload()')
버튼을 누르면, db의 데이터가 수정되고, 수정된 데이터가 페이지에 출력되게 하고싶습니다. 브라우저에서 새로고침을 하면 페이지가 제대로 리로드 되는데, 클릭이벤트 ronclick='window.location.reload()'를 통해서 새로고침을 하니 페이지가 로드되지 않습니다. 어떻게 해야 할까요
1 답변
-
제출 버튼에
onClick
이벤트나 별도의name
속성을 주어서 넘기는 것은 좋지 않습니다. 이렇게 하셔야 할 것 아닌가 조심스레 예상해 봅니다.??.jade
form(action='/count' method='post') input(type='hidden', name='num', value=i.num) input(type='submit', value='+')
main.js
app.post('/count', function (req, res) { var num_ = req.param.num; var sql = 'select times from db where num=?' conn.query(sql, [num_], function (err, rows) { if (err) { // 선택쿼리 오류시 실행 // 생략... } else { // 업뎃쿼리 실행 // 생략... if (err) { // 업뎃쿼리 오류시 실행 // 생략... } else { // 모든게 성공시 리디렉션을 여기서 실행 return res.redirect(req.get('referer')) } }) } }) })
- 답변 감사합니다. 집에 가보는대로 해보겠습니다. 고맙습니다. 조영민 2019.1.14 19:57
- 항상 답변달아주셔서 감사합니다. 제가 만들려는 웹페이지는 셀렉트 박스에서 과목을 선택하면 db에 저장되어 있는 문제들이 출력됩니다. +버튼을 누르면 해당 문제의 카운트 필드의 값이 증가합니다. 엽토군 님이 알려주신 코드를 입력하니 셀렉트 박스에서 선택된 것 들이 다 초기화 된 상태로 리디렉션이 됩니다. 하지만 브라우저 내부에서 새로고침을 하면 사용자가 출력된 문제들은 유지한 채로 카운터가 갱신됩니다. 사용자들이 새로고침을 누리지 않더라고 이와 같은 결과를 낼 수 는 없을가요? 조영민 2019.1.16 14:17
- "브라우저 내부에서 새로고침"을 했을때 셀렉트가 유지되는 것은 순전히 그 브라우저의 친절한 기능에 의한 것으로서 본질적 유지가 아닙니다. 저라면 +버튼에 onclick 이벤트만 주고 그 이벤트가 xmlhttprequest를 수행하도록 해보겠습니다. https://www.w3schools.com/js/js_ajax_intro.asp 엽토군 2019.1.16 14:21
- 감사합니다. 조영민 2019.1.16 15:04
- 근데 메타태그에 넣어서 넘기니까 진짜 편하네요. 다시한번 감사합니다. 조영민 2019.1.16 16:39
댓글 입력