Wie extrahiert man Formulardaten (form[method="post"]
) und Datei-Uploads, die über die HTTP-Methode POST
in Node.js gesendet werden?
Ich habe die Dokumentation gelesen, gegoogelt und nichts gefunden.
function (request, response) {
//request.post????
}
Gibt es eine Bibliothek oder einen Hack?
Sie können das Modul Querystring
verwenden:
var qs = require('querystring');
function (request, response) {
if (request.method == 'POST') {
var body = '';
request.on('data', function (data) {
body += data;
// Too much POST data, kill the connection!
// 1e6 === 1 * Math.pow(10, 6) === 1 * 1000000 ~~~ 1MB
if (body.length > 1e6)
request.connection.destroy();
});
request.on('end', function () {
var post = qs.parse(body);
// use post['blah'], etc.
});
}
}
Wenn Sie zum Beispiel ein Eingabefeld mit dem Namen "Alter" haben, können Sie darauf über die Variable "post" zugreifen:
console.log(post.age);
Wenn Sie Express verwenden (hochleistungsfähige, erstklassige Webentwicklung für Node.js), können Sie dies tun:
HTML:
<form method="post" action="/">
<input type="text" name="user[name]">
<input type="text" name="user[email]">
<input type="submit" value="Submit">
</form>
API-Client:
fetch('/', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
user: {
name: "John",
email: "[email protected]"
}
})
});
Node.js: (seit Express v4.16.0)
// Parse URL-encoded bodies (as sent by HTML forms)
app.use(express.urlencoded());
// Parse JSON bodies (as sent by API clients)
app.use(express.json());
// Access the parse results as request.body
app.post('/', function(request, response){
console.log(request.body.user.name);
console.log(request.body.user.email);
});
Node.js: (für Express <4.16.0)
const bodyParser = require("body-parser");
/** bodyParser.urlencoded(options)
* Parses the text as URL encoded data (which is how browsers tend to send form data from regular forms set to POST)
* and exposes the resulting object (containing the keys and values) on req.body
*/
app.use(bodyParser.urlencoded({
extended: true
}));
/**bodyParser.json(options)
* Parses the text as JSON and exposes the resulting object on req.body.
*/
app.use(bodyParser.json());
app.post("/", function (req, res) {
console.log(req.body.user.name)
});
Und wenn Sie nicht das gesamte Framework wie Express verwenden wollen, sondern auch verschiedene Arten von Formularen, einschließlich Uploads, benötigen, dann ist formaline vielleicht eine gute Wahl.
Es ist in Node.js-Module aufgeführt.