-
글쓴이글
-
2022년 6월 22일 22:29 #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].pwif (에러) return done(에러)
if (!id) return done(null, false, { message: '존재하지않는 아이디요' })
if (입력한비번 == pw) {
return done(null, 결과)
} else {
return done(null, false, { message: '비번틀렸어요' })
}});
}));
-
글쓴이글
- 답변은 로그인 후 가능합니다.