NodeJS с socket.io - PullRequest
       2

NodeJS с socket.io

0 голосов
/ 13 июня 2019

Обновления изменили код Я пытаюсь работать с socket.io и nodeJS, так как я все еще начинающий с обоими, и я не могу заставить его работать. Поэтому я нашел этот пример и попытался реализовать его https://github.com/priyanshrastogi/temperature-plot/blob/master/index.js

Я хочу показать данные с моего ESP8266 (это часть работы, я собираю данные). Я хочу отобразить эти данные, когда пользователь переходит на localhost: 4000 / sensor. Когда пользователь переходит на localhost: 4000 /, тогда я рендерить другую страницу (эта страница работает). Но данные на странице датчика не работают. Я думаю, потому что эта ошибка Ошибка: нет такого файла или каталога, не может открыть COM3

Это мой код узла JS

var express = require('express')
var app = require('express')()
var server = require('http').createServer(app)
var session = require('express-session')
var bodyParser = require('body-parser')
var request = require('request-promise')
var mongoose = require('mongoose')
var io = require('socket.io').listen(server)
const SerialPort = require('serialport')

const port = new SerialPort('\\\\.\\COM3', {baudRate: 9600}, function (err) {
    if (err) {
        return console.log('Error: ', err.message)
    }
})


port.on('data', (temp) => { //Read data
    console.log(temp);
    var today = new Date();
    io.sockets.emit('temp', {date: today.getDate()+"-"+today.getMonth()+1+"-"+today.getFullYear(), time: (today.getHours())+":"+(today.getMinutes()), temp:temp})
});

io.on('connection', (socket) => {
    console.log("Someone connected.");
})

require('dotenv').config()

mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true })

var citySchema = new mongoose.Schema({
    name: String
})

var cityModel = mongoose.model('City', citySchema)

async function collectWeather(cities) {
    var weatherData = []
    for (var city_object of cities) {
        var city = city_object.name
        var url = `http://api.openweathermap.org/data/2.5/weather?q=${city}&units=metric&appid=ef28c61a2416a123137107cf00536b5b`
        request(url)
        var body = await request(url)
        var weatherJSON = JSON.parse(body)
        var weather = {
        city: city,
        temperature: Math.round(weatherJSON.main.temp),
        description: weatherJSON.weather[0].description,
        icon: weatherJSON.weather[0].icon,
        }
        weatherData.push(weather)
    }
    return weatherData
}

express()
    app.use(express.static('static'))
    app.use(bodyParser.urlencoded({extended: true}))
    app.use(session({
        resave: false,
        saveUninitialized: true,
        secret: process.env.SESSION_SECRET
    }))

    app.set('view engine', 'ejs')
    app.set('views', 'view')

    app.get('/', function(req, res) {
        cityModel.find({}, function(err, cities) {
            collectWeather(cities).then(function(result) {
                var weatherData = {weatherData: result}
                res.render('index', weatherData)
            }).catch(err => {
                console.log(err)
                res.render('error', err)
            })
        })
    })

    app.post('/', function(req, res) {
        var newCity = new cityModel({name: req.body.city_name})
        newCity.save()
        .then(result => {
            res.redirect('/')
        }).catch(err =>{
            console.log(err)
            res.render('error', err)
        })
    })

    app.get('/sensor', function(req,res) {
        res.render('sensor')
    })

    server.listen('4000', () => {
        console.log('Server listening on Port 4000');
    })

А это мой Javascript

var socket = io.connect('http://localhost:4000'); //connect to server
var ctx = document.getElementById('myChart').getContext('2d');
var chart = new Chart(ctx, {
    // The type of chart we want to create
    type: 'line',
    // The data for our dataset
    data: {
    labels: [],
    datasets: [{
        label: "Temperature",
        borderColor: "#FF5733",
        data: [],
        fill: false,
        pointStyle: 'circle',
        backgroundColor: '#3498DB',
        pointRadius: 5,
        pointHoverRadius: 7,
        lineTension: 0,
    }]
    },
    // Configuration options go here
    options: {}

});
socket.on('temp', function(data) { //As a temp data is received 
    console.log(data.temp)
    document.getElementById('date').innerHTML = data.date //update the date
    if(chart.data.labels.length != 15) { //If we have less than 15 data points in the graph
        chart.data.labels.push(data.time) //Add time in x-asix
        chart.data.datasets.forEach((dataset) => {
            dataset.data.push(data.temp) //Add temp in y-axis
        });
    }
    else { //If there are already 15 data points in the graph.
        chart.data.labels.shift() //Remove first time data
        chart.data.labels.push(data.time) //Insert latest time data
        chart.data.datasets.forEach((dataset) => {
            dataset.data.shift() //Remove first temp data
            dataset.data.push(data.temp) //Insert latest temp data
        });
    }
    chart.update() //Update the graph.
})

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...