sse
This commit is contained in:
parent
a1b28ed73a
commit
3744c7d961
@ -37,4 +37,6 @@ FOREIGN KEY (transaction_id) REFERENCES transactions (transaction_id) FOREIGN KE
|
|||||||
);
|
);
|
||||||
`)
|
`)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
module.exports = db
|
module.exports = db
|
||||||
|
|||||||
4
index.js
4
index.js
@ -47,6 +47,7 @@ app.use( express.static( __dirname + '/frontend'))
|
|||||||
const accountsRoute = require("./routes/accounts");
|
const accountsRoute = require("./routes/accounts");
|
||||||
const transactionsRoute = require("./routes/transactions");
|
const transactionsRoute = require("./routes/transactions");
|
||||||
const resetRoute = require("./routes/reset")
|
const resetRoute = require("./routes/reset")
|
||||||
|
const { sse } = require("./sse")
|
||||||
|
|
||||||
const basepath = "/api/v1";
|
const basepath = "/api/v1";
|
||||||
|
|
||||||
@ -54,7 +55,7 @@ app.use(`${basepath}/accounts`, accountsRoute);
|
|||||||
app.use(`${basepath}/transactions`, transactionsRoute);
|
app.use(`${basepath}/transactions`, transactionsRoute);
|
||||||
app.use(`${basepath}/`, resetRoute.router);
|
app.use(`${basepath}/`, resetRoute.router);
|
||||||
|
|
||||||
app.get("/live", resetRoute.mysse)
|
app.get("/live", sse)
|
||||||
|
|
||||||
|
|
||||||
app.get("/", (req, res) => {
|
app.get("/", (req, res) => {
|
||||||
@ -64,3 +65,4 @@ app.get("/", (req, res) => {
|
|||||||
app.listen(port, () => {
|
app.listen(port, () => {
|
||||||
console.log(`App listening on port ${port}`);
|
console.log(`App listening on port ${port}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@ const express = require("express");
|
|||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
const db = require("../dependencies");
|
const db = require("../dependencies");
|
||||||
const { update } = require("./reset");
|
const {send_sse_update} = require("../sse")
|
||||||
|
|
||||||
// Fix if balance is null
|
// Fix if balance is null
|
||||||
function fix_balance_is_null(acc) {
|
function fix_balance_is_null(acc) {
|
||||||
@ -84,12 +84,8 @@ router.post("/", (req, res) => {
|
|||||||
.run(number, name, qualifiedName, des, type, req.body.parentAccount);
|
.run(number, name, qualifiedName, des, type, req.body.parentAccount);
|
||||||
|
|
||||||
res.status(204).send();
|
res.status(204).send();
|
||||||
|
send_sse_update();
|
||||||
for (res of update.values()) {
|
|
||||||
// res.write("data: update\n\n")
|
|
||||||
res.write("event: update\n");
|
|
||||||
res.write("data: {}\n\n");
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get("/:account", (req, res) => {
|
router.get("/:account", (req, res) => {
|
||||||
@ -160,11 +156,8 @@ router.put("/:account", (req, res) => {
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
res.status(204).send();
|
res.status(204).send();
|
||||||
for (res of update.values()) {
|
send_sse_update();
|
||||||
// res.write("data: update\n\n")
|
|
||||||
res.write("event: update\n");
|
|
||||||
res.write("data: {}\n\n");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -182,12 +175,7 @@ router.delete("/:account", (req, res) => {
|
|||||||
} else {
|
} else {
|
||||||
res.status(200).send();
|
res.status(200).send();
|
||||||
}
|
}
|
||||||
|
send_sse_update();
|
||||||
for (res of update.values()) {
|
|
||||||
// res.write("data: update\n\n")
|
|
||||||
res.write("event: update\n");
|
|
||||||
res.write("data: {}\n\n");
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
|||||||
@ -2,35 +2,13 @@ const express = require('express');
|
|||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
const db = require("../dependencies");
|
const db = require("../dependencies");
|
||||||
|
const {send_sse_update} = require("../sse")
|
||||||
|
|
||||||
router.post("/reset", (req, res) => {
|
router.post("/reset", (req, res) => {
|
||||||
db.exec("DELETE FROM accounts; DELETE FROM transaction_entries; DELETE FROM transactions")
|
db.exec("DELETE FROM accounts; DELETE FROM transaction_entries; DELETE FROM transactions")
|
||||||
|
|
||||||
res.status(204).send()
|
res.status(204).send()
|
||||||
|
send_sse_update()
|
||||||
})
|
})
|
||||||
|
|
||||||
const update = new Map()
|
module.exports = { router};
|
||||||
async function mysse(req, res) {
|
|
||||||
console.log('Got /events');
|
|
||||||
|
|
||||||
res.set({
|
|
||||||
'Cache-Control': 'no-cache',
|
|
||||||
'Content-Type': 'text/event-stream',
|
|
||||||
'Connection': 'keep-alive'
|
|
||||||
});
|
|
||||||
res.flushHeaders();
|
|
||||||
|
|
||||||
|
|
||||||
// Tell the client to retry every 10 seconds if connectivity is lost
|
|
||||||
res.write('retry: 10000\n\n');
|
|
||||||
update.set(req.sessionId, res)
|
|
||||||
console.log("connected")
|
|
||||||
|
|
||||||
res.on("close", () => {
|
|
||||||
update.delete(req.sessionId)
|
|
||||||
res.end()
|
|
||||||
})
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
module.exports = { router, mysse, update};
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@ const express = require('express');
|
|||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
const db = require("../dependencies");
|
const db = require("../dependencies");
|
||||||
const { update } = require("./reset")
|
const {send_sse_update} = require("../sse")
|
||||||
|
|
||||||
router.get("/", (req, res) => {
|
router.get("/", (req, res) => {
|
||||||
const transactions = db.prepare("SELECT transaction_id as id, postingDate, valueDate, title FROM transactions").all();
|
const transactions = db.prepare("SELECT transaction_id as id, postingDate, valueDate, title FROM transactions").all();
|
||||||
@ -30,11 +30,7 @@ router.post("/", (req, res) => {
|
|||||||
res.send({
|
res.send({
|
||||||
id: db_transaction.lastInsertRowid
|
id: db_transaction.lastInsertRowid
|
||||||
})
|
})
|
||||||
for (res of update.values()) {
|
send_sse_update()
|
||||||
// res.write("data: update\n\n")
|
|
||||||
res.write('event: update\n');
|
|
||||||
res.write('data: {}\n\n');
|
|
||||||
}
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -56,12 +52,8 @@ router.put("/:id", (req, res) => {
|
|||||||
const db_entries = db.prepare("INSERT INTO transaction_entries (transaction_id, account_name, amount, label) VALUES (?, ?, ?, ?)").run(req.params.id, req.body.entries[i].account, req.body.entries[i].amount, req.body.entries[i].label)
|
const db_entries = db.prepare("INSERT INTO transaction_entries (transaction_id, account_name, amount, label) VALUES (?, ?, ?, ?)").run(req.params.id, req.body.entries[i].account, req.body.entries[i].amount, req.body.entries[i].label)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
send_sse_update()
|
||||||
res.status(204).send()
|
res.status(204).send()
|
||||||
for (res of update.values()) {
|
|
||||||
res.write('event: update\n');
|
|
||||||
res.write('data: {}\n\n');
|
|
||||||
}
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -71,12 +63,7 @@ router.delete("/:id", (req, res) => {
|
|||||||
|
|
||||||
|
|
||||||
res.status(204).send()
|
res.status(204).send()
|
||||||
for (res of update.values()) {
|
send_sse_update()
|
||||||
// res.write("data: update\n\n")
|
|
||||||
res.write('event: update\n');
|
|
||||||
res.write('data: {}\n\n');
|
|
||||||
}
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
|||||||
42
sse.js
Normal file
42
sse.js
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
let newcode = false;
|
||||||
|
//helferfunktion die das richtige format für das event erstellt
|
||||||
|
function sendMessage(response, eventname, datacontent) {
|
||||||
|
//response.write ist ein append, also schreibt was ans ende der seite
|
||||||
|
|
||||||
|
response.write('event: ' + eventname + '\n' + 'data: ' + JSON.stringify(datacontent) + '\n\n')
|
||||||
|
newcode = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function send_sse_update() {
|
||||||
|
newcode = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async function sse(request, response) {
|
||||||
|
|
||||||
|
//header so setzen
|
||||||
|
response.set({
|
||||||
|
'Cache-Control': 'no-cache',
|
||||||
|
'Content-Type': 'text/event-stream',
|
||||||
|
'Connection': 'keep-alive'
|
||||||
|
})
|
||||||
|
response.flushHeaders();
|
||||||
|
//loop, schickt ein event, wartet 5 sekunden, schickt dann erneut.
|
||||||
|
// so abändern, dass anderer code in den loop hineingreifen kann (variable bool "newcode" oder so)
|
||||||
|
//dann wenn newcode = true, schicke ein eben via sendlive)
|
||||||
|
//der loop muss glaube ich bestehen bleiben
|
||||||
|
while (true){
|
||||||
|
if (newcode) {
|
||||||
|
console.log("update send")
|
||||||
|
sendMessage(response, 'update', {})
|
||||||
|
} else {
|
||||||
|
sendMessage(response,'hello', {})
|
||||||
|
}
|
||||||
|
// response.write()
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 5000))
|
||||||
|
console.log(newcode)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = { sse, send_sse_update }
|
||||||
Loading…
x
Reference in New Issue
Block a user