노드 내에서 mysql 데이터베이스에 연결하려고하는데 새 레코드가 추가 될 때마다 소켓 (socket.io 사용)을 만들고 싶지만 다음 오류가 발생합니다.
오류 : TCPConnectWrap.afterConnect에서 ECONNREFUSED 139.0.0.1:3306 연결 [완료 상태로] (node : net : 1133 : 16)
나는 socket.io를 처음 접했기 때문에 어떻게 작동하는지 이해하기 위해 온라인 예제에서 코드를 시도하고 있습니다.
내 코드는 다음과 같습니다.
const app = require('http').createServer().listen(8000);
const mysql = require('mysql');
const io = require('socket.io')(app);
const db = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
database: 'ExampleLogin'
});
db.connect((err) => {
if(err) console.log(err);
console.log("Connected Successfully To The Database");
});
//db.connect();
console.log('Server running on port 8000');
const prev_id = 0;
io.sockets.on('connection', (socket) => {
socket.emit('greeting', 'Hello');
socket.on('check_podcast', (data) => {
const uid = data['uid'];
const query = "SELECT * FROM podcastTable WHERE id =" +uid;
connection.query(query, (err, rows, fields) => {
if (err) throw err;
if(rows[0].id > prev_id) {
socket.emit('new_podcast', rows[0]);
prev_id = rows[0].id;
}
});
});
db.end();
});
내 코드를 실행하면 터미널에 다음 출력이 표시됩니다.
2 개의 문제를 볼 수 있습니다.
먼저 MySQL 자격 증명이 올바른지, MySQL이 실행 중인지 확인하십시오. 사용자가 지정된 호스트 이름에서 연결할 수 있습니까?
위의 문제가 해결되면 다음 문제는 "connection.query"입니다.
io.sockets.on('connection', (socket){
위의 라이브 "연결"에서 이벤트는 MySQL 쿼리와 관련이 없습니다.
귀하의 쿼리는
db.query(query, (err, rows, fields) => {
'db'Object는 MySQL의 연결 정보를 담고 있습니다.
다음은 서버 측 및 클라이언트 측의 전체 작업 코드입니다.
// server.js
const HTTP = require('http');
const mysql = require('mysql');
server = HTTP.createServer();
var io = require('socket.io')(server,{
pingInterval: 5000,
pingTimeout: 2500,
cookie: false
});
server.listen(8080);
var MySQLConnection = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
MySQLConnection.connect(function(err) {
if (err) {
console.log('MySQL COnnection Error --> ' + err);
}
else{
console.log("MySQL Connected Successfully");
}
});
io.on('connection',function(socket){
socket.emit('greeting', 'Hello');
socket.on('checkUser', (data) => {
const email = data['email'];
const query = "SELECT * FROM table1 WHERE email ='" +email+"'";
MySQLConnection.query(query, (err, result, fields) => {
if (err) {
console.log('MySQL Query Error --> '+ err);
}
else{
console.log(result);
}
});
});
});
그리고 여기 클라이언트입니다
<!-- client.html -->
<script src="http://SERVERIP:8080/socket.io/socket.io.js"></script>
<script>
var socket = io('http://SERVERIP:8080', {
transports: [ 'websocket' ],
'reconnection': true,
'reconnectionDelay': 500,
'reconnectionDelayMax': 1000,
'reconnectionAttempts': 100
});
socket.on('connect', onConnect);
socket.on('greeting', onGreeting);
function onConnect(){
console.log('Connected Successully...');
}
function onGreeting(DATA){
console.log('onGreeting --> DATA --> ' + DATA);
var sendData = {
email: '[email protected]'
}
socket.emit('checkUser',sendData);
}
</script>
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다