Liefere statische Dateien aus, verarbeite HTML-Formulare und nimm einfache Uploads mit multer entgegen.
Diese Lektion in Kodokon öffnenEine API gibt nicht nur JSON zurück. HTML-Seiten, Bilder, Stylesheets, ein Frontend-Build: Express liefert das alles mit einer einzigen Middleware aus, express.static. Jede Datei im Ordner wird unter der passenden URL erreichbar: public/logo.png antwortet auf /logo.png.
import express from "express";
const app = express();
app.use(express.static("public"));
app.listen(3000, () => {
console.log("http://localhost:3000");
});Kommen wir zu den Formularen. Ein klassisches HTML-Formular sendet seine Felder im Format application/x-www-form-urlencoded. Die Middleware express.urlencoded dekodiert sie und füllt req.body, genau wie express.json es für JSON tut. Lege in public/ eine Seite mit einem Formular ab, dessen method auf POST und dessen action auf /contact gesetzt ist, und verarbeite dann das Absenden:
app.use(express.urlencoded({ extended: true }));
app.post("/contact", (req, res) => {
const { name, message } = req.body;
if (!name || !message) {
return res.status(400).send("Required fields");
}
res.send("Thank you " + name + ", message received.");
});Um eine Datei zu senden, muss das Formular enctype mit dem Wert multipart/form-data deklarieren und ein input-Feld vom Typ file enthalten, das zum Beispiel avatar heißt. Express kann dieses Format nicht allein dekodieren: Die Referenz-Middleware dafür ist multer.
npm install multerimport multer from "multer";
const upload = multer({
dest: "uploads/",
limits: { fileSize: 2 * 1024 * 1024 }
});
app.post(
"/avatar",
upload.single("avatar"),
(req, res) => {
if (!req.file) {
return res.status(400).json({
error: "No file received"
});
}
res.status(201).json({
name: req.file.filename,
size: req.file.size
});
}
);express.static, wenn es auf den Ordner public angewendet wird?req.body bei einem klassischen HTML-Formular?express.json()express.urlencoded()express.static()method auf GET gesetztenctype auf multipart/form-data gesetzttarget auf _blank gesetzt