Node.js/Express - req.body funktioniert nicht?
Ich möchte in meiner app.js-Datei Werte aus meiner HTML-Datei benutzen. In meiner HTML-Datei ist ein TextFeld namens "search". Dazu will ich in app.js
var searchText = req.body.search
verwenden, um den Wert des Feldes zu bekommen. Das klappt aber nicht!
Hier mein app.js-Code:
var express = require("express");
var pg = require("pg");
var bodyParser = require("body-parser");
var CON_STRING = process.env.DB_CON_STRING;
if (CON_STRING == undefined) {
console.log("Error: Environment variable DB_CON_STRING not set!");
process.exit(1);
}
pg.defaults.ssl = true;
var dbClient = new pg.Client(CON_STRING);
dbClient.connect();
var urlencodedParser = bodyParser.urlencoded({ extended: false });
const PORT = 80;
var app = express();
app.set("views", "views");
app.set("view engine", "pug");
app.get("/search", urlencodedParser, function (req, res) {
var searchText = req.body.source;
console.log(searchText); //HIER IST DER FEHLER: Es spuckt "undefined" aus!
dbClient.query("SELECT * FROM book LIMIT 50 ", function (dbError, dbItemsResponse) {
res.render("index", {
BookList: dbItemsResponse.rows
});
});
});
app.listen(PORT, function () {
console.log(App listening on Port ${PORT});
});
Das
console.log(searchText)
gibt mir immer undefined zurück. Wenn ich in der HTML-Datei über ein Script den Wert vom Textfeld ausgebe, dann ist der das, was da drinnen steht. Nur mit req.body scheine ich nicht darauf zugreifen zu können. Ich bekomme immer undefined.
Was mache ich falsch? Wie kann ich es beheben? Hat jemand eine Idee?
1 Antwort
Die Request-Methoden GET und POST haben einen wesentlichen Unterschied. Im ersteren Fall werden die Daten, die an den Server verschickt werden sollen, an die URL gehängt (Querystring). Bei letzterem Fall werden die Daten über den Request Body geliefert.
Du empfängst die Daten deines Formulars nun über GET (jedenfalls verwendest du app.get), aber suchst nach den Informationen im Request Body. Im query-Objekt solltest du hingegen fündig werden.
var searchText = req.query.search;
Wenn der Wert des name-Attributs vom Textfeld zudem search heißt, wird der Parameter im Querystring auch mit search bezeichnet.