Я новичок в sockets.io и пытаюсь отправить 2 значения при использовании socket.on()
.Моя проблема в том, что я не получаю никаких ошибок при отправке 2 значений с клиента на сервер.Я попытался напечатать значения, однако я получил неопределенный по обоим параметрам ( как на клиенте, так и на сервере ).Я хотел бы знать, как правильно отправить 2 значения из клиент-сервер (socket.on())
и обратно в сервер-клиент (socket.emit())
, поскольку я не получаю никаких ошибок.
ПРИМЕЧАНИЕ: все отлично работает, если в сокетах используется только 1 значение!
Мой index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>socket.io - chart.js example</title>
<script type="text/javascript "src="/socket.io/socket.io.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.0/Chart.bundle.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
</head>
<body>
<h1>Analisis de Sentimientos</h1>
<form>
Ingresar Nombre del Lugar:
<input id="lugar" type="text" name="Lugar"><br>
<input type="submit" value="Analizar" onclick="recivir()">
</form>
<canvas id="chart"></canvas>
<canvas id="chart2"></canvas>
<script type="text/javascript">
var lugar = "";
function recivir(){
lugar = document.getElementById("lugar").value;
}
var socket = io.connect();
var ctx = document.getElementById('chart').getContext('2d')
var data = {
labels: [''],
datasets: [{
data: [0],
label: 'POSITIVO',
backgroundColor: 'rgb(0,0,170,0.8)',
render: 'percentage'
}]
}
var options = {
plugins: {
labels: {
render: 'label',
}
},
showActualPercentages: true,
}
var chart = new Chart(ctx, {
type: 'bar',
data: data,
options: options
})
chart.canvas.parentNode.style.width = '30%';
socket.on('temperature', function (value, lugar) {
var length = data.labels.length
if (length >= 5) {
data.datasets[0].data.shift()
data.labels.shift()
}
data.labels.push('');
data.datasets[0].data.push(value)
chart.update()
})
var socket2 = io.connect();
var ctx2 = document.getElementById('chart2').getContext('2d')
var data2 = {
labels: [''],
datasets: [{
data: [0],
label: 'NEGATIVO',
backgroundColor: 'rgb(170,0,0,0.8)',
render: 'percentage'
}]
}
var options2 = {
plugins: {
labels: {
render: 'label',
}
},
showActualPercentages: true,
}
var chart2 = new Chart(ctx2, {
type: 'bar',
data: data2,
options: options2
})
chart2.canvas.parentNode.style.width = '30%';
socket2.on('temperature', function (value, lugar) {
var length = data2.labels.length
if (length >= 5) {
data2.datasets[0].data.shift()
data2.labels.shift()
}
data2.labels.push('');
data2.datasets[0].data.push(value)
chart2.update();
if(((data.datasets[0].data[1] == data.datasets[0].data[2]) && (data.datasets[0].data[2] == data.datasets[0].data[3]))
&& ((data.datasets[0].data[1] > 0) && (data.datasets[0].data[2] > 0) && (data.datasets[0].data[3] > 0))
&& ((data2.datasets[0].data[1] == data2.datasets[0].data[2]) && (data2.datasets[0].data[2] == data2.datasets[0].data[3]))
&& ((data2.datasets[0].data[1] > 0) && (data2.datasets[0].data[2] > 0) && (data2.datasets[0].data[3] > 0))){
socket.close();
socket2.close();
}
})
</script>
</body>
</html>
Мой server.js:
'use strict'
const http = require('http')
const path = require('path')
const EventEmitter = require('events')
const express = require('express')
const socketio = require('socket.io')
const port = process.env.PORT || 8888
const app = express()
const server = http.createServer(app)
const io = socketio(server)
const events = new EventEmitter()
let x = 0;
app.use(express.static(path.join(__dirname, 'public')))
io.on('connect', socket => {
events.on('temperature', ({value, lugar}) => {
console.log(value); //this equals undefined
console.log(lugar); //this equals undefined
socket.emit('temperature', {value,lugar})
})
})
// This function will be changed for the J5 sensor event
// sensor.on('change', function () {
// events.emit('temperature', this.celsius)
// })
//
setInterval(() => {
if(x < 30){
x++;
}
const temperature = x;
events.emit('temperature', {temperature,x});
}, 1000)
server.listen(port, () => console.log(`Listening on port ${port}`))