• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Node.js, Express 게시판 몽고디비 대신 mysql을 사용했는데, 궁금한게 있습니다.

몽고디비 대신 mysql을 사용했는데, 궁금한게 있습니다.

  • 이 주제에는 2개 답변, 2명 참여가 있으며 전병훈3 년 전에 전에 마지막으로 업데이트했습니다.
3 글 보임 - 1 에서 3 까지 (총 3 중에서)
  • 글쓴이
  • #36814

    전병훈
    참가자

    회사에서 node.js를 사용하기 위해 공부하는 직장인입니다.

    회사에서 쓰기 위해서 영상을 공부하면서 몽고 DB 대신에 MYSQL로 검색을 통해 약간 수정해서 작업했습니다.

    그런데, put이나 delet로 ajax로 전송해서 MYSQL로 SELCT 할 때 특히 오류가 나고(신기한 건 작동은 되는 것 같습니다. DB)

    SELCT를 하는 list 페이지에서는 F5를 누르면  에러가 납니다.

    일단 list 페이지의 오류 입니다.

     

    node:events:498
    throw er; // Unhandled 'error' event
    ^

    Error: Cannot enqueue Handshake after already enqueuing a Handshake.
    at Protocol._validateEnqueue (D:\node.js\node_modules\mysql\lib\protocol\Protocol.js:221:16)
    at Protocol._enqueue (D:\node.js\node_modules\mysql\lib\protocol\Protocol.js:138:13)
    at Protocol.handshake (D:\node.js\node_modules\mysql\lib\protocol\Protocol.js:51:23)
    at Connection.connect (D:\node.js\node_modules\mysql\lib\Connection.js:116:18)
    at D:\node.js\server.js:59:24
    at Layer.handle [as handle_request] (D:\node.js\node_modules\express\lib\router\layer.js:95:5)
    at next (D:\node.js\node_modules\express\lib\router\route.js:144:13)
    at Route.dispatch (D:\node.js\node_modules\express\lib\router\route.js:114:3)
    at Layer.handle [as handle_request] (D:\node.js\node_modules\express\lib\router\layer.js:95:5)
    at D:\node.js\node_modules\express\lib\router\index.js:284:15
    Emitted 'error' event on Connection instance at:
    at Connection._handleProtocolError (D:\node.js\node_modules\mysql\lib\Connection.js:423:8)
    at Protocol.emit (node:events:520:28)
    at Protocol._delegateError (D:\node.js\node_modules\mysql\lib\protocol\Protocol.js:398:10)
    at Handshake.<anonymous> (D:\node.js\node_modules\mysql\lib\protocol\Protocol.js:232:10)
    at Handshake.emit (node:events:520:28)
    at Handshake.Sequence.end (D:\node.js\node_modules\mysql\lib\protocol\sequences\Sequence.js:78:12)
    at D:\node.js\node_modules\mysql\lib\protocol\Protocol.js:236:14
    at processTicksAndRejections (node:internal/process/task_queues:78:11) {
    code: 'PROTOCOL_ENQUEUE_HANDSHAKE_TWICE',
    fatal: false
    }

    Node.js v17.4.0
    [nodemon] app crashed - waiting for file changes before starting...

     

    두번쨰로 INSERT 전송시후 오류입니다. (전송자체는 성공했습니다.)

     

    node:events:498
    throw er; // Unhandled 'error' event
    ^

    Error: Cannot enqueue Handshake after already enqueuing a Handshake.
    at Protocol._validateEnqueue (D:\node.js\node_modules\mysql\lib\protocol\Protocol.js:221:16)
    at Protocol._enqueue (D:\node.js\node_modules\mysql\lib\protocol\Protocol.js:138:13)
    at Protocol.handshake (D:\node.js\node_modules\mysql\lib\protocol\Protocol.js:51:23)
    at Connection.connect (D:\node.js\node_modules\mysql\lib\Connection.js:116:18)
    at D:\node.js\server.js:44:20
    at Layer.handle [as handle_request] (D:\node.js\node_modules\express\lib\router\layer.js:95:5)
    at next (D:\node.js\node_modules\express\lib\router\route.js:144:13)
    at Route.dispatch (D:\node.js\node_modules\express\lib\router\route.js:114:3)
    at Layer.handle [as handle_request] (D:\node.js\node_modules\express\lib\router\layer.js:95:5)
    at D:\node.js\node_modules\express\lib\router\index.js:284:15
    Emitted 'error' event on Connection instance at:
    at Connection._handleProtocolError (D:\node.js\node_modules\mysql\lib\Connection.js:423:8)
    at Protocol.emit (node:events:520:28)
    at Protocol._delegateError (D:\node.js\node_modules\mysql\lib\protocol\Protocol.js:398:10)
    at Handshake.<anonymous> (D:\node.js\node_modules\mysql\lib\protocol\Protocol.js:232:10)
    at Handshake.emit (node:events:520:28)
    at Handshake.Sequence.end (D:\node.js\node_modules\mysql\lib\protocol\sequences\Sequence.js:78:12)
    at D:\node.js\node_modules\mysql\lib\protocol\Protocol.js:236:14
    at processTicksAndRejections (node:internal/process/task_queues:78:11) {
    code: 'PROTOCOL_ENQUEUE_HANDSHAKE_TWICE',
    fatal: false
    }

    Node.js v17.4.0
    [nodemon] app crashed - waiting for file changes before starting...

     

    마지막으로 sever.js 코드입니다. connection의 내용은 지워두었습니다.

     

    const express = require('express');
    const app = express();
    const bodyParser = require('body-parser');
    app.use(bodyParser.urlencoded({extended:true}));

    var mysql = require('mysql');
    const { send } = require('express/lib/response');
    var connection = mysql.createConnection({
      host     : '       ',    // 호스트 주소
      user     : '        ',           // mysql user
      password : '      ',       // mysql password
      database : '      ',         // mysql 데이터베이스
      charset : 'utf8',
      port: '      '
    });
    app.set('view engine','ejs');
    app.engine('ejs', require('ejs').__express);
    const methodOverride = require('method-override')
    app.use(methodOverride('_method'))

    const passport = require('passport')
    const LocalStrategy = require('passport-local').Strategy
    const session = require('express-session')

    app.use(session({secret : '비밀코드',resave : true, saveUninitialized : false}));
    app.use(passport.initialize())
    app.use(passport.session())
    app.listen(8080,function(){
        console.log(1)
        });
       

    app.get('/%EC%A0%84%EC%86%A1',function(요청,응답){
        응답.sendFile(__dirname+'/send.html')
        });
    app.post('/add',function(요청,응답){
            응답.send('전송')
            console.log(요청.body.title)
            console.log(요청.body.contents)

            let sql = 'INSERT INTO data (title,contents) VALUES ("'+요청.body.title+'","'+요청.body.contents+'")'
           
            connection.connect();
            connection.query(sql,
            function (에러, results, fields) {
               if(에러){console.log(에러)}
               
              console.log('전송');
           
            });
            connection.end();
           

            });
    app.get('/list',function(요청,응답){
                let sql = 'SELECT * FROM data'
           
                connection.connect();
               connection.query(sql,
                function (에러, 결과, fields) {
                   if(에러){console.log(에러)}
                 
                   응답.render('list.ejs',{posts:결과})
                });
               
               
    });

    app.delete('/delete',function(요청,응답){

      //  connection.connect();
    let sql_del = 'DELETE FROM data WHERE idx = '+요청.body._idx
    응답.send({result:'성공'});
    connection.query(sql_del);

    })

    app.get('/edit/:id',function(요청,응답){

       

        let edit = 'SELECT * FROM data WHERE idx = '+요청.params.id
           console.log(edit)
        connection.connect();
       connection.query(edit,
        function (에러, 결과, fields) {
           if(에러){console.log(에러)}
          console.log(결과)
           응답.render('edit.ejs',{posts:결과})
        });
       
     
    });

    app.put('/edit',function(요청,응답){

        //  connection.connect();
      let sql_edit = 'UPDATE `data` SET `title`="'+요청.body.title+'",`contents`="'+요청.body.contents+'" WHERE idx='+요청.body.idx
      connection.query(sql_edit);
      응답.redirect('/list')
     
      })

      app.get('/login',function(요청,응답){

           응답.render('login.ejs')
     
    });

    app.post('/login',passport.authenticate('local',{failureRedirect : '/fail'}),function(요청,응답){
       
        응답.redirect('/')

        });

       
        passport.use(new LocalStrategy({
            usernameField: 'id',
            passwordField: 'pw',
            session: true,
            passReqToCallback: false,
          }, function (입력한아이디, 입력한비번, done) {
            //console.log(입력한아이디, 입력한비번);

           
            let member = 'SELECT id,pw FROM member WHERE id = "'+입력한아이디 +'" and pw = "'+입력한비번+'"'
            console.log(member)
           connection.connect();
        connection.query(member, function (에러, 결과, fields) {
          console.log(결과[0].id)
          console.log(결과[0].pw)
          let id = 결과[0].id
          let pw = 결과[0].pw

            if (에러) return done(에러)
           
            if (!id) return done(null, false, { message: '존재하지않는 아이디요' })
            if (입력한비번 == pw) {
              return done(null, 결과)
            } else {
              return done(null, false, { message: '비번틀렸어요' })
            }

         });

          }));

     

     

    #36837

    codingapple
    키 마스터

    connection.connect();

    이건 연결하는코드같은데 아마 1회만 써놔도 될듯요 

    #36920

    전병훈
    참가자

    해결됬습니다. 정말감사합니다!

3 글 보임 - 1 에서 3 까지 (총 3 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠