Jak odzyskać parametry POST query?
Oto moja prosta forma:
<form id="loginformA" action="userlogin" method="post">
<div>
<label for="email">Email: </label>
<input type="text" id="email" name="email"></input>
</div>
<input type="submit" value="Submit"></input>
</form>
Oto Mój ekspres.js / Node.kod js:
app.post('/userlogin', function(sReq, sRes){
var email = sReq.query.email.;
}
Próbowałem sReq.query.email
lub sReq.query['email']
lub sReq.params['email']
itp. Żaden z nich nie działa. Wszystkie wracają undefined
.
18 answers
Rzeczy zmieniły się po raz kolejny uruchamiając Express 4.16.0, Możesz teraz używać express.json()
i express.urlencoded()
tak jak w Express 3.0.
To było inne począwszy od Express 4.0 do 4.15:
$ npm install --save body-parser
A potem:
var bodyParser = require('body-parser')
app.use( bodyParser.json() ); // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({ // to support URL-encoded bodies
extended: true
}));
Reszta jest jak w Express 3.0:
Najpierw musisz dodać oprogramowanie pośredniczące, aby przeanalizować dane postu.
Dodaj jedną lub obie z następujących linijek kod:
app.use(express.json()); // to support JSON-encoded bodies
app.use(express.urlencoded()); // to support URL-encoded bodies
Następnie, w swoim handlerze, użyj req.body
obiekt:
// assuming POST: name=foo&color=red <-- URL encoding
//
// or POST: {"name":"foo","color":"red"} <-- JSON encoding
app.post('/test-page', function(req, res) {
var name = req.body.name,
color = req.body.color;
// ...
});
Zauważ, że użycie express.bodyParser()
nie zaleca się.
app.use(express.bodyParser());
...jest równoważne:
app.use(express.json());
app.use(express.urlencoded());
app.use(express.multipart());
Problemy bezpieczeństwa istnieją z express.multipart()
, więc lepiej jest wyraźnie dodać wsparcie dla określonych typów kodowania, których potrzebujesz. Jeśli potrzebujesz kodowania wieloczęściowego (na przykład do obsługi przesyłania plików), powinieneś przeczytać to.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-27 18:38:10
Uwaga : ta odpowiedź jest dla Express 2. Zobacz tutaj dla Express 3.
Jeśli używasz connect / express, powinieneś użyć bodyParser middleware : jest to opisane w Expressjs guide .
// example using express.js:
var express = require('express')
, app = express.createServer();
app.use(express.bodyParser());
app.post('/', function(req, res){
var email = req.param('email', null); // second parameter is default
});
Oto Oryginalna wersja connect-only:
// example using just connect
var connect = require('connect');
var url = require('url');
var qs = require('qs');
var server = connect(
connect.bodyParser(),
connect.router(function(app) {
app.post('/userlogin', function(req, res) {
// the bodyParser puts the parsed request in req.body.
var parsedUrl = qs.parse(url.parse(req.url).query);
var email = parsedUrl.email || req.body.email;;
});
})
);
Zarówno querystring jak i body są przetwarzane przy użyciu rails-style(qs
) zamiast biblioteki niskiego poziomu querystring
. W celu analizy powtórzeń parametry z qs
, parametr musi mieć nawiasy: name[]=val1&name[]=val2
. Obsługuje również zagnieżdżone mapy. Oprócz analizowania przesłanych formularzy HTML, bodyParser może automatycznie analizować żądania JSON.
Edit : czytam w Expressie.js i zmodyfikowałem moją odpowiedź, aby była bardziej naturalna dla użytkowników Express.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:50
Bezpieczeństwo przy użyciu express.bodyParser()
Podczas gdy wszystkie inne odpowiedzi obecnie zalecają użycie express.bodyParser()
middleware, jest to w rzeczywistości owijka wokół express.json()
, express.urlencoded()
, i express.multipart()
middlewares ( http://expressjs.com/api.html#bodyParser ). parsowanie ciał żądań formularza odbywa się za pomocą oprogramowania pośredniczącego express.urlencoded()
i jest wszystkim, czego potrzebujesz, aby ujawnić dane formularza na obiekcie req.body
.
Ze względu na troskę o bezpieczeństwo Z Jak express.multipart()
/connect.multipart()
tworzy pliki tymczasowe dla wszystkich przesłanych plików (i nie są zbierane śmieci), jest teraz zalecane nie używaj wrappera express.bodyParser()
, ale zamiast tego używaj tylko tego, czego potrzebujesz.
Uwaga: connect.bodyParser()
zostanie wkrótce zaktualizowany, aby zawierać tylko urlencoded
i json
po wydaniu Connect 3.0 (który rozszerza Express).
W skrócie, zamiast ...
app.use(express.bodyParser());
...należy użyć
app.use(express.urlencoded());
app.use(express.json()); // if needed
I jeśli / kiedy trzeba obsłużyć formularze wieloczęściowe (przesyłanie plików), korzystaj z biblioteki lub oprogramowania pośredniczącego innych firm, takich jak multiparty, busboy, dicer itp.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-22 16:33:50
To zrobi, jeśli chcesz zbudować wysłane zapytanie bez middleware:
app.post("/register/",function(req,res){
var bodyStr = '';
req.on("data",function(chunk){
bodyStr += chunk.toString();
});
req.on("end",function(){
res.send(bodyStr);
});
});
To prześle to do przeglądarki
email=emailval&password1=pass1val&password2=pass2val
Prawdopodobnie lepiej jest użyć middleware, więc nie musisz pisać tego w kółko przy każdej trasie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-01 00:35:09
Uwaga dla użytkowników Express 4:
Jeśli spróbujesz umieścić app.use(express.bodyParser());
w swojej aplikacji, podczas próby uruchomienia serwera Express pojawi się następujący błąd:
Błąd: większość oprogramowania pośredniczącego (takiego jak bodyParser) nie jest już dołączona do programu Express i musi być zainstalowana osobno. Zobacz https://github.com/senchalabs/connect#middleware .
Będziesz musiał zainstalować pakiet body-parser
oddzielnie z npm , a następnie użyć czegoś takiego jak poniżej (przykład zaczerpnięty ze strony GitHub):
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser());
app.use(function (req, res, next) {
console.log(req.body) // populated!
next();
})
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-10 20:59:41
Dana forma:
<form action='/somepath' method='post'>
<input type='text' name='name'></input>
</form>
Using express
app.post('/somepath', function(req, res) {
console.log(JSON.stringify(req.body));
console.log('req.body.name', req.body['name']);
});
Wyjście:
{"name":"x","description":"x"}
req.param.name x
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-20 11:12:56
app.use(express.bodyParser());
Następnie dla app.post
request można uzyskać wartości post poprzez req.body.{post request variable}
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-17 15:20:11
Aktualizacja dla Express 4.4.1
Oprogramowanie pośredniczące następujących elementów jest usuwane z Express.
- bodyParser
- json
- urlencoded
- multipart
Kiedy używasz oprogramowania pośredniczącego bezpośrednio, tak jak w express 3.0. Otrzymasz następujący błąd:
Error: Most middleware (like urlencoded) is no longer bundled with Express and
must be installed separately.
Aby korzystać z tych middleware, teraz musisz wykonać npm dla każdego middleware osobno.
Ponieważ bodyParser jest oznaczony jako przestarzały, więc polecam idąc za pomocą json, urlencode i Parser multipart jak formidable, connect-multiparty. (Multipart middleware jest również przestarzałe).
Pamiętaj również, że po prostu definiując urlencode + json, dane formularza nie będą przetwarzane i req.ciało będzie nieokreślone. Musisz zdefiniować oprogramowanie pośredniczące obsługujące żądanie wieloczęściowe.
var urlencode = require('urlencode');
var json = require('json-middleware');
var multipart = require('connect-multiparty');
var multipartMiddleware = multipart();
app.use(json);
app.use(urlencode);
app.use('/url/that/accepts/form-data', multipartMiddleware);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-04 20:01:41
Backend:
import express from 'express';
import bodyParser from 'body-parser';
const app = express();
app.use(bodyParser.json()); // add a middleware (so that express can parse request.body's json)
app.post('/api/courses', (request, response) => {
response.json(request.body);
});
Frontend:
fetch("/api/courses", {
method: 'POST',
body: JSON.stringify({ hi: 'hello' }), // stringify JSON
headers: new Headers({ "Content-Type": "application/json" }); // add headers
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-02 22:26:19
Dla Express 4.1 i nowszych
Ponieważ większość odpowiedzi używa do wyrażenia, bodyParser, connect; gdzie multipart jest przestarzały. Istnieje bezpieczny sposób na łatwe wysyłanie obiektów Post multipart.
Multer może być używany jako zamiennik connect.multipart ().
Aby zainstalować pakiet
$ npm install multer
Załaduj go w swojej aplikacji:
var multer = require('multer');
A następnie dodaj go do stosu middleware wraz z inną formą parsującą middleware.
app.use(express.json());
app.use(express.urlencoded());
app.use(multer({ dest: './uploads/' }));
Połącz się.json () uchwyty application / json
Połącz się.urlencoded () obsługuje application / x-www-form-urlencoded
Multipart() obsługuje multipart / form-data
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-30 10:37:32
Szukałam dokładnie tego problemu. Zastosowałem się do wszystkich powyższych rad, ale req.ciało wciąż zwracało pusty obiekt {}. W moim przypadku było to coś tak prostego, jak niepoprawny html.
W html formularza upewnij się, że używasz atrybutu 'name'
w znacznikach wejściowych, a nie tylko 'id'
. W przeciwnym razie nic nie jest analizowane.
<input id='foo' type='text' value='1'/> // req = {}
<input id='foo' type='text' name='foo' value='1' /> // req = {foo:1}
Mój głupi błąd jest twoją korzyścią.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-18 14:20:48
Nie powinieneś używać aplikacji.użycie (wym.bodyParser ()) . BodyParser jest związkiem json + urlencoded + mulitpart. Nie powinieneś tego używać, ponieważ multipart zostanie usunięty w connect 3.0.
Aby to rozwiązać, możesz to zrobić:
app.use(express.json());
app.use(express.urlencoded());
Its very important know that app.użycie (Ok.router) powinien być używany po JSON i urlencoded, w przeciwnym razie nie działa!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-18 13:52:34
Request streaming pracował dla mnie
req.on('end', function() {
var paramstring = postdata.split("&");
});
var postdata = "";
req.on('data', function(postdataChunk){
postdata += postdataChunk;
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-29 18:01:27
Mogłem znaleźć wszystkie parametry używając poniższego kodu dla Posti GET requests.
var express = require('express');
var app = express();
const util = require('util');
app.post('/', function (req, res) {
console.log("Got a POST request for the homepage");
res.send(util.inspect(req.query,false,null));
})
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-21 13:08:46
Post Parameters can be retrieved as follows-
app.post('/api/v1/test',Testfunction);
http.createServer(app).listen(port, function(){
console.log("Express server listening on port " + port)
});
function Testfunction(request,response,next)
{
console.log(request.param("val1"));
response.send('HI');
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-11 15:30:23
Użyj pakietu express-fileupload
var app = require('express')();
var http = require('http').Server(app);
const fileUpload = require('express-fileupload')
app.use(fileUpload());
app.post('/', function(req, res) {
var email = req.body.email;
res.send('<h1>Email :</h1> '+email);
});
http.listen(3000, function(){
console.log('Running Port:3000');
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-06 13:46:43
var express = require("express");
var bodyParser = require("body-parser");
var app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.get('/',function(req,res){
res.sendfile("index.html");
});
app.post('/login',function(req,res){
var user_name=req.body.user;
var password=req.body.password;
console.log("User name = "+user_name+", password is "+password);
res.end("yes");
});
app.listen(3000,function(){
console.log("Started on PORT 3000");
})
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-19 23:27:08
Używasz ' req.zapytanie.post "z niewłaściwą metodą" req.zapytanie.post 'works with' method = get' 'method = post' działa z body-parserem.
Po prostu spróbuj, zmieniając post, aby uzyskać
<form id="loginformA" action="userlogin" method="get">
<div>
<label for="email">Email: </label>
<input type="text" id="email" name="email"></input>
</div>
<input type="submit" value="Submit"></input>
</form>
I w ekspresowym kodzie użyj ' app.get '
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-07 05:25:46