Benutzer-Werkzeuge

Webseiten-Werkzeuge


javascript

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
javascript [2022-02-21 18:40:05] davidjavascript [2023-01-18 15:43:23] (aktuell) – [test api] david
Zeile 4: Zeile 4:
  
 JS kann auch als Sprache für das backend genutzt werden. Dazu gibt es die JS runtime [[https://nodejs.org/|NodeJS]], welche auf Chromium's V8 JavaScript engine aufbaut. Eine neuere Alternative vom gleichen Erfinder ist [[https://deno.land/|Deno]] (Anagram von Node). Deno setzt auf eingebauten TypeScript Support und keine Paketverwaltung (sondern Import von Modulen mit URLs), unterstützt aber auch klassisches JS. JS kann auch als Sprache für das backend genutzt werden. Dazu gibt es die JS runtime [[https://nodejs.org/|NodeJS]], welche auf Chromium's V8 JavaScript engine aufbaut. Eine neuere Alternative vom gleichen Erfinder ist [[https://deno.land/|Deno]] (Anagram von Node). Deno setzt auf eingebauten TypeScript Support und keine Paketverwaltung (sondern Import von Modulen mit URLs), unterstützt aber auch klassisches JS.
 +
 +  * [[https://google.github.io/styleguide/jsguide.html|Google JavaScript Style Guide]]
  
  
Zeile 53: Zeile 55:
  
 export { object as obj }; export { object as obj };
 +</code>
 +
 +===== AJAX/AJAJ (fetch) =====
 +
 +  * __AJAX__ steht für //Asynchronous JavaScript and XML//. Man spricht heutzutage zwar immer noch oft von AJAX und nicht von AJAJ, obwohl die meisten APIs mittlerweile das kompaktere und weniger komplexe JSON nutzen.
 +  * __fetch__ ist eine moderne Alternative zu __XMLHttpRequest__ (XHR). fetch arbeitet komplett **asynchron** und gibt ein **Promise** zurück, während XHR **synchron** und **asynchron** verwendet werden kann und mit **callbacks** arbeitet.
 +
 +<code javascript>
 +const response = await fetch("/api/test", {
 +    method: "get",
 +    headers: {
 +      "Content-Type": "application/json"
 +    }
 +});
 +console.info(`status: ${response.status}`);
 +let json;
 +try {
 +    json = await response.json();
 +} catch (e) {
 +    console.error(e);
 +    json = JSON.stringify({});
 +} finally {
 +    console.info(json);
 +}
 </code> </code>
  
 ===== Beispielprogramme ===== ===== Beispielprogramme =====
 +
 +
 +==== backend ====
 +
 +
 +=== test api ===
 +
 +API zum testen: Alle Anfragen werden geloggt und mit "Hello World!" und dem Status Code 418 (I'm a teapot) beantwortet.
 +
 +<code javascript test.js>
 +"use strict";
 +
 +import express from "express";
 +
 +const app = express();
 +const port = process.env.PORT || 3000;
 +
 +app.use(express.json());
 +app.use((req, res, next) => {
 +    const payload = {
 +        body: req.body ?? null,
 +        headers: req.headers ?? null,
 +        url: req.url ?? null,
 +    };
 +    console.log(payload);
 +    res.status(418);
 +    res.send("Hello World!");
 +    next();
 +});
 +
 +app.listen(port);
 +console.info(`Express started on port ${port}`);
 +
 +</code>
 +
 +<code json package.json>
 +{
 +  "name": "test",
 +  "version": "1.0.0",
 +  "license": "MIT",
 +  "type": "module",
 +  "main": "test.js",
 +  "dependencies": {
 +    "express": "^4.18.2"
 +  },
 +}
 +
 +</code>
 +
 +
 +=== hello world webserver (deno) ===
 +
 +<code javascript hello-world.ts>
 +import { serve } from "https://deno.land/std@0.126.0/http/server.ts";
 +
 +const port = 80;
 +
 +const handler = (): Response => {
 +    return new Response("Hello World!");
 +};
 +
 +serve(handler, { port });
 +console.log(`Listening on http://localhost:${port}`);
 +
 +</code>
  
  
Zeile 121: Zeile 212:
 </code> </code>
  
-<code javascript scripts.js+<code javascript scripts.ts
-"use strict"; +globalThis.addEventListener("DOMContentLoaded", () => { 
-window.addEventListener("DOMContentLoaded", () => { +    const selector = ".colspan-full"; 
-    let selector = ".colspan-full"; +    const elements = document.querySelectorAll(selector); 
-    let span = document.querySelectorAll(selector); +    for (const e of elements) {
-    for (let e of span) {+
         let table = e.parentElement;         let table = e.parentElement;
-        while (table.tagName.toLowerCase() !== "table") { +        if (table == null) continue; 
-            table = table.parentElement;+        while (table?.tagName.toLowerCase() !== "table") { 
 +            table = table?.parentElement ?? null;
         }         }
  
-        if (table !== undefined{ +        if (table == nullconsole.error("couldn't find the table!"); 
-            let columnCount = table + 
-                .querySelector("thead"+        const columnCount = table 
-                .querySelector("tr"+            .querySelector("thead"
-                .querySelectorAll("th, td").length; +            ?.querySelector("tr"
-            e.setAttribute("colspan", columnCount); +            ?.querySelectorAll("th, td").length ?? 0
-        } else { +        e.setAttribute("colspan", columnCount.toString());
-            console.error("couldn't find the table!"); +
-        }+
     }     }
 }); });
-</code> 
- 
- 
-==== backend ==== 
- 
- 
-=== hello world webserver (deno) === 
- 
-<code typescript hello-world.ts> 
-import { serve } from "https://deno.land/std@0.126.0/http/server.ts"; 
- 
-const port = 80; 
- 
-const handler = (): Response => { 
-    return new Response("Hello World!"); 
-}; 
- 
-serve(handler, { port }); 
-console.log(`Listening on port http://localhost:${port}`); 
  
 </code> </code>
  
  
/home/http/wiki/data/attic/javascript.1645468805.txt · Zuletzt geändert: von david