Node.js: Werte an HTML Datei übergeben?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

zum einen kommt das ganz darauf an wie du die daten einbinden willst. entweder statisch oder dynamisch.

statisch wäre, dass die informationen bereits vor dem laden abgefragt und in das html eingebettet werden.

das würdest du dann beispielsweise mit einer view engine machen wie zb pug (jade) oder ejs.

ich hab selber nur mit ejs gearbeitet, wäre aber relativ viel um das hier rein zu kopieren deswegen hier ein paar nütliche links:

https://scotch.io/tutorials/use-ejs-to-template-your-node-application

https://www.codementor.io/naeemshaikh27/node-with-express-and-ejs-du107lnk6

https://www.npmjs.com/package/ejs

damit kannst du dann einfach ähnlich wie bei php in deine html (bzw dann ejs) datei platzhalter für variablen einfügen die du dann in etwa so setzten kannst beim laden der seite:

app.get("/", (req, res) => {
  const testId = databaseQuery();
  res.render("index.html", {testId: testId});
});

die funktion databaseQuery ist hier nur beispielhaft, jedenfalls musst du das gewünsche ergebnis dann in dieser variable haben (achtung, datenbankabfragen sind meist asynchron!)

wenn du die ganzen daten aber dynamisch haben willst, also dass sie auch nach laden der seite erst abgefragt werden machst du das über ajax. der client sendet also beispielsweise einen POST-request an deinen nodejs server. dieser liefert dann als antwort die relevanten daten zurück. hier muss aber auch auf sql injections usw geachtet werden, weil der nutzer natürlich alles mögliche in den body dieser POST anfrage stecken kann, also immer sichergehen, dass damit kein schaden angerichtet werden kann. mal ein kleines beispiel.

clientseitiges js:

const data = {}
const request = new XMLHttpRequest();
request.open('POST', '/get_test_id', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
request.send(data);

request.onload = () => {
  const res = this.response;
  // hier antwort des servers (res) verwerten
}

data ist hier optional (und auch leer gelassen) aber hier könntest du beispielsweise dann noch daten des nutzers prüfen. beispielsweise sendet er dir seinen nutzernamen und du gibts dementsprechende daten aus (achtung nur ein beispiel, so nicht für private daten nutzen, da diese sonst jeder anfordern kann!)

serverseitiges js:

app.post("/get_test_id", function(req, res){
  const testId = databaseQuery();
  res.send({testId: testId});
});

so würde das dann in etwa (etwas kurz gefasst) aussehen.

zu deinen nebenfragen:

  1. ja das ist so richtig. sieht dann aber auch etwas anders aus wenn du ejs nutzt (wie oben gezeigt)
  2. ich denke es kommt vorallem da drauf an wie und für was du die datenbank nutzt. da hat jede so ihre vor und nachteile, denke ich. ich benutze für meine projekte ganz gern postgres. hat auch eine ganz gute implementierung für nodejs.

generell würde ich empfehlen das frontend vom backend zu trennen. heißt du hast einen backend server der die ganzen post requests verarbeitet, mit der db interagiert usw und einen frontend server (am besten mit einem frontend framework wie angular) der eben nur die ganze website rendert. ist für den anfang wohl allerdings etwas viel auf einmal, deswegen fang ruhig erstmal so an, war bei mir genauso (:

falls du noch mehr fragen zu dem thema hast kann ich sie dir gerne beantworten

Woher ich das weiß:Studium / Ausbildung – Softwareentwickler, B. Sc. Informatik
tom20032005 
Fragesteller
 14.10.2019, 15:53

Danke, das wars!

1