Skip to content

Commit c1097e5

Browse files
committed
07 - revision finished
1 parent d743bfa commit c1097e5

File tree

1 file changed

+14
-14
lines changed

1 file changed

+14
-14
lines changed

07-creating-posts.md.erb

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -247,9 +247,9 @@ Wenn du nun http://localhost:3000/submit/ aufrufst ohne eingeloggt zu sein, soll
247247

248248
Was Routing-Hooks richtig nett macht ist, dass sie _reaktiv_ sind. Das bedeutet, wir können deklarativ arbeiten und müssen uns nicht um Callbacks oder ähnliches kümmern, wenn der Benutzer sich einloggt. Wenn sich der Login-Zustand eines Benutzers ändert, wird das Seitentemplate sofort von `accessDenied` zu `postSubmit` geändert - ohne das wir explizit Code dafür schreiben müssen.
249249

250-
Log dich ein und versuch dann die Seite neuzuladen. Du wirst eventuell das Template "Zugriff verweigert" für einen kurzen Moment aufflackern sehen bevor das Anlageformular erscheint. Der Grund dafür ist, dass Meteor Templates so früh wie möglich rendert. Es kann sein, dass dies so früher geschieht als der Server mitteilen kann, ob der Benutzer eingeloggt ist. (Der Zustand wird übrigens im LocalStorage des Browsers zwischengespeichert.)
250+
Log dich ein und versuch dann die Seite neu zu laden. Du wirst eventuell das Template "Zugriff verweigert" für einen kurzen Moment aufflackern sehen, bevor das Anlageformular erscheint. Der Grund dafür ist, dass Meteor Templates so früh wie möglich rendert. Es kann sein, dass dies früher geschieht als der Server mitteilen kann, ob der Benutzer eingeloggt ist. (Der Zustand wird übrigens im LocalStorage des Browsers zwischengespeichert.)
251251

252-
Um dieses Problem zu verhindern (Es handelt sich um ein Problem, welches Du häufiger sehen wirst, wenn Du Dich mit den Eigenheiten von Latenz zwischen Server und Client beschäftigst), werden wir für eine kurze Zeit einen Ladebildschirm anzeigen und warten bis feststeht, ob der Benutzer eingeloggt ist oder nicht.
252+
Um dieses Problem zu verhindern (es handelt sich um ein Problem, welches Du häufiger sehen wirst, wenn Du Dich mit den Eigenheiten von Latenz zwischen Server und Client beschäftigst), werden wir für eine kurze Zeit einen Ladebildschirm anzeigen und warten bis feststeht, ob der Benutzer eingeloggt ist oder nicht.
253253

254254
Dies ist notwendig, da wir ohne den Server nicht entscheiden können, ob der Benutzer eine korrekte Authorisierung vorgenommen hat oder nicht. Solange können wir weder das Template `accessDenied` noch das Template `postSubmit` anzeigen.
255255

@@ -289,7 +289,7 @@ Router.before(requireLogin, {only: 'postSubmit'});
289289

290290
### Links verstecken
291291

292-
Die einfachste Möglichkeit ausgeloggte Benutzer daran zu hindern, versehentlich das Anlegeformular zu erreichen, ist es den Link zu verstecken. Das geht ziehmlich einfach:
292+
Die einfachste Möglichkeit ausgeloggte Benutzer daran zu hindern, versehentlich das Anlegeformular zu erreichen, ist es den Link zu verstecken. Das geht ziemlich einfach:
293293

294294
~~~html
295295
<ul class="nav">
@@ -300,7 +300,7 @@ Die einfachste Möglichkeit ausgeloggte Benutzer daran zu hindern, versehentlich
300300

301301
<%= commit "7-5", "Only show submit post link if logged in." %>
302302

303-
Der Helper `currentUser` wird durch das Package `accounts` und sein Handlebar-Aequivalent `Meteor.user()` zur Verfügung gestellt. Weil der Helper evenfalls reaktiv ist, wird der Link angezeigt, sobald Du Dich einloggst. Wenn Du Dich ausloggst verschwindet er automatisch.
303+
Der Helper `currentUser` wird durch das Package `accounts` und sein Handlebar-Äquivalent `Meteor.user()` zur Verfügung gestellt. Weil der Helper ebenfalls reaktiv ist, wird der Link angezeigt, sobald Du Dich einloggst. Wenn Du Dich ausloggst verschwindet er automatisch.
304304

305305
### Die Meteor-Methode: Bessere Abstraktion und Sicherheit
306306

@@ -313,12 +313,12 @@ Wir haben es geschafft, den Zugriff auf das Anlegeformular für ausgeloggte Benu
313313
Du wirst dir vielleicht denken, dass wir dass alles im Event-Handler `submit` erledigen können. Realistisch betrachtet, würde das allerdings zu einer Menge Probleme führen.
314314

315315
- Für den Timestamp müssten wir uns darauf verlassen, dass der Computer des Benutzers die korrekte Uhrzeit hat. Das ist leider nicht immer der Fall.
316-
- Clients kennen nur einen Teil der benutzten URLS. Nämlich die, deren Beiträge sie sehen können (Wir werden uns nachher anschauen, wie das genau funktioniert). Also gibt es zuverlässigen keinen Weg client-seitig die Eindeutigkeit der URL zu überprüfen.
316+
- Clients kennen nur einen Teil der benutzten URLS. Nämlich die, deren Beiträge sie sehen können (wir werden uns nachher anschauen, wie das genau funktioniert). Also gibt es keinen zuverlässigen Weg, client-seitig die Eindeutigkeit der URL zu überprüfen.
317317
- Schließlich, obwohl wir die Benutzerdaten client-seitig hinzufügen _könnten_, können wir nicht gewährleisten, dass alle Angaben stimmen. Das könnte von findigen Personen in der Browser-Konsole missbraucht werden.
318318

319-
Aus all diesen Gründen ist es besser, wenn wir unsere Event-Handler einfach halten - Und wenn wir mehr als einfachste Einfüge- oder Update-Operationen benötigen, benutzen wir eine **Methode**
319+
Aus all diesen Gründen ist es besser, wenn wir unsere Event-Handler einfach halten - und wenn wir mehr als einfachste Einfüge- oder Update-Operationen benötigen, benutzen wir eine **Methode**
320320

321-
Eine Meteor-Methode ist eine serverseitige Funktion, die vom Client aufgerufen wird. Genau genommen kennen wir sie schon -- Hinter den Kulissen sind die `insert`, `update` und `remove`-Funktionen der `Collection` allesamt Methoden. Schauen wir uns mal an, wie wir selber welche erzeugen können.
321+
Eine Meteor-Methode ist eine serverseitige Funktion, die vom Client aufgerufen wird. Genau genommen kennen wir sie schon -- hinter den Kulissen sind die `insert`, `update` und `remove`-Funktionen der `Collection` allesamt Methoden. Schauen wir uns mal an, wie wir selber welche erzeugen können.
322322

323323
Lass uns dazu noch mal die Datei `post_submit.js` anschauen. Anstelle direkt in die Collection `Posts` einzufügen, rufen wir nun eine Methode namens `post` auf:
324324

@@ -344,7 +344,7 @@ Template.postSubmit.events({
344344
~~~
345345
<%= caption "client/views/posts/post_submit.js" %>
346346

347-
Die Funktion `Meteor.call` ruft eine Methode auf, die durch ihrem ersten Parameter spezifiziert wird. Du kannst weitere Parameter (in diesem Fall das Objekt `post`, welches wir aus dem Formular zusammengebaut haben) und einen Callback übergeben. Der Callback wird ausgeführt, wenn die Methode auf dem Server abgearbeitet ist. In diesem Fall geben wir Rückmeldung an den Benutzer, ob Probleme aufgetreten sind oder leiten ihn auf die Diskussionsseite für den Beitrag weiter.
347+
Die Funktion `Meteor.call` ruft eine Methode auf, die durch ihren ersten Parameter spezifiziert wird. Du kannst weitere Parameter (in diesem Fall das Objekt `post`, welches wir aus dem Formular zusammengebaut haben) und einen Callback übergeben. Der Callback wird ausgeführt, wenn die Methode auf dem Server abgearbeitet ist. In diesem Fall geben wir Rückmeldung an den Benutzer, ob Probleme aufgetreten sind oder leiten ihn auf die Diskussionsseite für den Beitrag weiter.
348348

349349
Danach definieren wir die neue Methode in der Datei `collections/posts.js`. Wir entfernen den Block `allow()`, weil Meteor-Methoden diesen ohnehin umgehen. Du erinnerst dich vielleicht: Methoden werden auf dem Server ausgeführt. Meteor nimmt an, dass diese deshalb vertrauenswürdig sind.
350350

@@ -390,21 +390,21 @@ Meteor.methods({
390390

391391
Diese Methode ist ein wenig komplizierter, aber wir hoffen du kannst uns folgen.
392392

393-
Zuerst definieren wir die Variable `user`. Wir überprüfen, ob ein Beitrag mit dem selben Link schon existiert. Dann wird geschaut, ob der Benutzer eingeloggt ist. Ein Fehler wird geworfen, wenn das nicht der Fall ist (Der Fehler kann später im Browser angezeigt werden). Wir validieren danach den Beitrag auf einfache Weise, um sicher zu gehen, dass der Beitrag einen Titel hat.
393+
Zuerst definieren wir die Variable `user`. Wir überprüfen, ob ein Beitrag mit dem selben Link schon existiert. Dann wird geschaut, ob der Benutzer eingeloggt ist. Ein Fehler wird geworfen, wenn das nicht der Fall ist (der Fehler kann später im Browser angezeigt werden). Wir validieren danach den Beitrag auf einfache Weise, um sicher zu gehen, dass der Beitrag einen Titel hat.
394394

395-
Als nächstes, falls ein weiterer Beitrag mit der selben URL existiert, werfen wir einen Fehler `302` (der einen Redirect entspricht). Dadurch können wir dem Benutzer mitteilen, dass er sich den vorherigen Beitrag anschauen soll.
395+
Als Nächstes, falls ein weiterer Beitrag mit der selben URL existiert, werfen wir einen Fehler `302` (der einen Redirect entspricht). Dadurch können wir dem Benutzer mitteilen, dass er sich den vorherigen Beitrag anschauen soll.
396396

397-
Meteors Klasse `Error` nimmt drei Parameter auf. Der erste (`error`) ist in diesem Fall der numerische Code `302`. Der zweite (`reason`) ist eine kurze menschenlesbare Fassung des Fehlers. Der dritte (`details`) kann dazu genutzt werden hilfreiche zusätzliche Information weiterzugeben.
397+
Meteors Klasse `Error` nimmt drei Parameter auf. Der erste (`error`) ist in diesem Fall der numerische Code `302`. Der Zweite (`reason`) ist eine kurze menschenlesbare Fassung des Fehlers. Der dritte (`details`) kann dazu genutzt werden hilfreiche zusätzliche Information weiterzugeben.
398398

399399
In unserem Fall, benutzen wir den dritten Parameter, um die ID des bereits existierenden Beitrags weiterzureichen. Spoiler: Wir werden dies später benutzen, um den Benutzer auf die Seite des vorherigen Beitrags weiterzuleiten.
400400

401-
Wenn all diese Überprüfungen erfolgreich waren, übernehmen wir lediglich die Felder des Objektes, die wir einfügen wollen (Um zu vermeiden, dass der Benutzer weitere Felder in unsere Datenbank einfügen kann, z.B. in dem er die Console verwendet). Außerdem fügen wir zusätzliche Information über den Benutzer, sowie den Zeitpunkt des Anlegens in den Beitrag ein.
401+
Wenn all diese Überprüfungen erfolgreich waren, übernehmen wir lediglich die Felder des Objektes, die wir einfügen wollen (um zu vermeiden, dass der Benutzer weitere Felder in unsere Datenbank einfügen kann, z.B. in dem er die Konsole verwendet). Ausserdem fügen wir zusätzliche Information über den Benutzer, sowie den Zeitpunkt des Anlegens in den Beitrag ein.
402402

403-
Als letztes fügen wir den Beitrag ein und geben die ID des erzeugten Objekts zurück.
403+
Als Letztes fügen wir den Beitrag ein und geben die ID des erzeugten Objekts zurück.
404404

405405
### Sortieren von Beiträgen
406406

407-
Jetzt, da wir bei allen Beiträgen über ein Datum verfügen, macht es Sinn danach zu sortieren. Um das zu erreichen, können wir Mongos Operator `sort` verwenden. Dieser erwartet, dass ein Objekt aus Schlüsseln besteht, nach deren Werten sortiert werden kann. Zusätzlich gibt ein Vorzeichen an, ob wir aufsteigend oder absteigend sortieren.
407+
Jetzt, da alle Beiträge über ein Datum verfügen, macht es Sinn danach zu sortieren. Um das zu erreichen, können wir Mongos Operator `sort` verwenden. Dieser erwartet, dass ein Objekt aus Schlüsseln besteht, nach deren Werten sortiert werden kann. Zusätzlich gibt ein Vorzeichen an, ob wir aufsteigend oder absteigend sortieren.
408408

409409
~~~js
410410
Template.postsList.helpers({

0 commit comments

Comments
 (0)