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()'를 통해서 새로고침을 하니 페이지가 로드되지 않습니다. 어떻게 해야 할까요

  • 페이지가 로드 되지 않는다는게 어떤 의미인가요? 데이터가 갱신되지 않는다는 말인가요? doodoji 2019.1.14 14:17
  • 네 갱신이 안 됩니다 조영민 2019.1.14 19:59
  • 브라우저에서 새로고침 한 것과 동일한 기능을 서버에서 구현할 수는 없을까요? 조영민 2019.1.14 20:15
  • 요 아래 엽토군님이 제안하신 방법 써 보셨나요? res.redirect요 doodoji 2019.1.14 20:17
  • 내일 퇴근해서 해보겠습니다. 감사합니다. 조영민 2019.1.14 21:28

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    제출 버튼에 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

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)