Cześć, pracuję nad komunikacją i serwerem i chciałem się spróbować z nową dla mnie biblioteką Express. Klucz w tym, że potrzebuję hostować stronę, która będzie odbierać dane z aplikacji i je przetwarzać. Oraz konieczna jest odpowiedź ze strony do aplikacji.
- Tak więc przygotowałem sobie już stronę, jej serwer, silnik renderingu (tu hbs).
- Udało mi się wysłać dane z serwera za pomocą przycisku do aplikacji (metodą post), chociaż jest to wywoływane przez operatora, a docelowo będę potrzebował aplikacją (po stronie strony www) odpowiednio uwarunkować. Zakładam, że wystarczy wtedy zrobić odpowiednie przekierunkowanie z poziomu js strony na np. '/akcja'.
- Dane wysyłane na serwer też niby działają, ale tu pojawia się pytanie, wykorzystałem metodę również post, jednak, żeby wyświetlić dane aktualnie wykorzystuje res.render('index', data), co stanowi problem, bo strona odświeżana jest gubiąc informacje o poprzednich danych (po prostu jest reloadowana). Czy jest jakaś metoda transmisji danych bez ponownego renderowania całej strony, tak aby tylko zmieniały się parametry zmiennych zdefiniowanych (tu np.{{test}})?
Oto aktualna wersja skrócona mojego kodu:
//___________ Libraries ___________
const express = require('express')
const bodyParser = require('body-parser')
const app = express()
const path = require('path')
//___________ Configuration ___________
const PORT = process.env.PORT || 8080
const PATH = __dirname + '/views'
app.set('views', PATH);
app.set('view engine', 'hbs')
app.use(express.static(path.join(__dirname, 'public')));
//___________ My files ___________
const routes = require('./routes/index')
//___________ Parsers ___________
app.use(bodyParser.json())
app.use(bodyParser.raw());
app.use(bodyParser.urlencoded({ extended: true }));
//___________ Routes ___________
app.use('/', routes)
app.listen(PORT)
const express = require('express')
const router = express.Router()
const PagesController = require('../controllers/PagesController');
const ScannerController = require('../controllers/ScannerController');
router.get('/', PagesController.home);
router.post('/ref', ScannerController.set);
router.post('/feedback', ScannerController.get);
module.exports = router
var data = { test: { dist: 0, angle: 0 } }
function get(req, res) {
console.log(req.body.upvote)
res.redirect('/')
}
function set(req, res) {
let ggg = data
res.emit(ggg);
res.render('index', ggg);
}
module.exports = {
set: set,
get: get,
data: data
}
Jak można zauważyć, ja przygotowuje sobie dane w obiekcie data, a potem na żądanie wysyłam je do serwera.
function home (req, res) { res.render('index') }
module.exports = { home: home }
Wewnątrz ciała strony mam na chwilę obecną testowe przyciski do odbioru i transmisji danych oraz dwa div'y ze zmiennymi.
<form action="/feedback" method="POST">
<input type="submit" name="upvote" value="post feedback" />
</form>
<form action="/ref" method="post">
<input type="submit" name="upvote" value="POST" />
</form>
<div> {{test.dist}} </div>
<div> {{test.angle}} </div>
Czy da się w jakiś sposób wyświetlać i aktualizować zmienne na stronie bez jej przeładowywania, tak aby np. móc sobie je dodawać do tablicy, bez utraty poprzednich. Czy da się to rozwiązać inaczej, niż bazą danych (np. moongose), zapisem do pliku (np. csv), bądź socket.io? A może znacie lepsze rozwiązanie, niż te co przedstawiłem?
Z góry dziękuję.