Я пытаюсь переделать шаблон мопса через setInterval().Я пытаюсь переделать шаблон мопса через setInterval(). Это возможно?
Я пытаюсь показать данные на живом экране страницы с сервера MySQL. Я могу получить данные на странице, но я не знаю, как обновлять данные, не обновляя всю страницу.
Я попытался реализовать AJAX, а также попытался сделать это через socket.io, но не смог отправить данные в шаблон мопса для обеих попыток.
Server.js
var express = require('express');
var app = express();
var http = require('http');
var server = http.createServer(app);
var pug = require('pug');
var io = require('socket.io').listen(server);
var clients = [];
var outsideData = require('./public/data.js');
app.set('views', __dirname + '/views');
app.set('view engine', 'pug');
app.use(express.static(__dirname + '/public'));
app.get('/', function(req, res) {
res.render('index.pug', {
data: outsideData.getData()
});
});
io.sockets.on('connect', function() {
clients.push(io.sockets);
console.log("connected");
});
//Recompile Pug Template
function recompile() {
var pug = require('pug');
var template = require('fs').readFileSync('./views/index.pug', 'utf8');
var pugFn = pug.compile(template, {
filename: './views/index.pug',
pretty: true
});
var renderedTemplate = pugFn({
data: outsideData.getData()
});
}
//Send data every second.
setInterval(function() {
for (i = 0; i < clients.length; i++) {
recompile();
clients[i].emit('data', outsideData.getData());
}
}, 30000);
//Handle diconnected clients.
io.sockets.on('disconnect', function() {
var index = clients.indexOf(io.socket);
if (index != -1) {
clients.splice(index, 1);
}
});
server.listen(3001);
index.pug
doctype html
html
head
title Socket Communication
script(src='https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js')
script(src="/socket.io/socket.io.js")
//script(src="client.js")
var socket = io.connect();
socket.on('data', function(data) {
var myData = $('myData');
console.log(data)
});
body
h1= "Help me..."
p= JSON.stringify(data)
Update: Вот изменения, которые работает. Спасибо, mk12ok.
Server.js
var express = require('express');
var app = express();
var http = require('http');
var server = http.createServer(app);
var pug = require('pug');
var io = require('socket.io').listen(server);
var clients = [];
var outsideData = require('./public/data.js');
app.set('views', __dirname + '/views');
app.set('view engine', 'pug');
app.use(express.static(__dirname + '/public'));
app.get('/', function(req, res) {
res.render('index.pug');
});
io.sockets.on('connect', function() {
clients.push(io.sockets);
console.log("connected");
});
//Send data every second.
setInterval(function() {
for (i = 0; i < clients.length; i++) {
clients[i].emit('data', outsideData.getData());
}
}, 1000);
//Handle diconnected clients.
io.sockets.on('disconnect', function() {
var index = clients.indexOf(io.socket);
if (index != -1) {
clients.splice(index, 1);
}
});
server.listen(3001);
index.pug
doctype html
html
head
title Socket Communication
script(src="/socket.io/socket.io.js")
//script(src="client.js")
body
h1= "Help me..."
p(id="data")
script.
var socket = io.connect();
socket.on('data', function(data) {
//Replace JSON.stringify(data) with JSON.stringify(data.tag) to retrieve a specific value stored in your JSON data.
document.getElementById("data").innerHTML = "Received" + JSON.stringify(data);
console.log(data)
});
Вам не придется обновлять 'index.pug' а обновлять страницу с данными, посланных клиенту через' socket.io' – mk12ok
Обновив страницу вы имеете в виду я обновить индекс .pug? Я не совсем понимаю, что делать с данными, которые поступают на страницу через socket.on(). Console.log (data) печатает это нормально, но я не знаю, как передать эти данные в мопс-переменную , p = data – Student
Я имею в виду, что вы можете обновить страницу с помощью манипуляций DOM с помощью простого javascript или jquery. Насколько я понимаю, вы будете отправлять массивы с результатами запросов mysql. Вы можете легко показать данные на странице несколькими способами. Пожалуйста, покажите html-код вашей страницы, и мы сможем работать над этим. – mk12ok