[NODEJS] 어떻게 POST 쿼리 매개 변수를 검색?
NODEJS어떻게 POST 쿼리 매개 변수를 검색?
해결법
-
1.상황이 다시 한 번 익스프레스 4.16.0을 시작 변경된 단지 익스프레스 3.0 등), 당신은 지금 express.json 사용할 수 있습니다 ()와 (express.urlencoded.
상황이 다시 한 번 익스프레스 4.16.0을 시작 변경된 단지 익스프레스 3.0 등), 당신은 지금 express.json 사용할 수 있습니다 ()와 (express.urlencoded.
이것은 4.15에 익스프레스 4.0을 시작 달랐다 :
$ npm install --save body-parser
그리고:
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 }));
나머지는 익스프레스 3.0과 같다 :
첫째로 당신은 몸의 포스트 데이터를 구문 분석하는 몇 가지 미들웨어를 추가해야합니다.
다음 코드 줄 중 하나 또는 모두를 추가 :
app.use(express.json()); // to support JSON-encoded bodies app.use(express.urlencoded()); // to support URL-encoded bodies
그런 다음 핸들러에서 req.body 개체를 사용 :
// 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; // ... });
express.bodyParser ()의 사용이 권장되지 않습니다.
app.use(express.bodyParser());
... 상당이다 :
app.use(express.json()); app.use(express.urlencoded()); app.use(express.multipart());
안전 문제는 express.multipart ()로 존재하고, 더 나은하는 것입니다 수 있도록 명시 적으로 특정 인코딩 유형 (들) 당신이 필요로에 대한 지원을 추가합니다. 당신이 (예를 들어 지원 업로드 파일에) 필요에 다중 인코딩을 할 경우에 당신은 이것을 읽어야한다.
-
2.express.bodyParser를 사용하여 보안 문제 ()
express.bodyParser를 사용하여 보안 문제 ()
다른 모든 답변은 현재 express.bodyParser () 미들웨어를 사용하는 것이 좋습니다 있지만,이 실제로 express.urlencoded express.json 주위의 래퍼 (), (), 및 express.multipart () 미들웨어 (http://expressjs.com입니다 /api.html#bodyParser). 양식 요청 기관의 분석은 express.urlencoded () 미들웨어에 의해 수행하고 req.body 개체에 양식 데이터를 노출하는 데 필요한 모든 것이 있습니다.
때문에 어떻게 express.multipart () / connect.multipart ()와 보안 문제에 (쓰레기 수집되지 않음) 모든 업로드 된 파일의 임시 파일을 생성, 이제 express.bodyParser () 래퍼 대신 사용을 사용하지 않는 것이 좋습니다 단지 미들웨어는 당신이 필요합니다.
참고 : 연결 3.0 (Express가 확장되는) 해제 될 때 connect.bodyParser ()는 곧에만 urlencoded를 JSON을 포함하도록 업데이트됩니다.
그래서 짧은 대신에 ...
app.use(express.bodyParser());
... 당신은 사용해야합니다
app.use(express.urlencoded()); app.use(express.json()); // if needed
와, 등 다자간, 웨이터, 다이 서와 같은 타사 라이브러리를 사용하거나 미들웨어 경우 / 당신이 다중 양식 (파일 업로드)을 처리해야 할 때
-
3.참고 :이 대답은 여기 익스프레스 3 익스프레스 2. 참조입니다.
참고 :이 대답은 여기 익스프레스 3 익스프레스 2. 참조입니다.
당신이 연결 사용하는 경우 / 당신이 bodyParser 미들웨어를 사용해야 표현 : 그것은 Expressjs 가이드에 설명합니다.
// 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 });
여기에 원래 연결 전용 버전입니다 :
// 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;; }); }) );
쿼리 문자열과 몸 모두 레일 스타일의 매개 변수 처리 (QS)보다는 낮은 수준의 쿼리 문자열 라이브러리를 사용하여 구문 분석됩니다. QS 반복적 파라미터들을 분석하기 위해, 파라미터는 브래킷 있어야 이름 [] = VAL1 및 이름 []을 val2 =있다. 또한 중첩 된지도를 지원합니다. HTML 양식 제출을 분석뿐만 아니라, bodyParser 자동으로 JSON 요청을 구문 분석 할 수 있습니다.
편집 : 나는 express.js에 최대 읽기 및 익스프레스의 사용자에게 더 자연스러운로 내 대답을 수정했습니다.
-
4.당신은 미들웨어없이 게시 된 쿼리를 작성하려는 경우에 그것을 할 것입니다 :
당신은 미들웨어없이 게시 된 쿼리를 작성하려는 경우에 그것을 할 것입니다 :
app.post("/register/",function(req,res){ var bodyStr = ''; req.on("data",function(chunk){ bodyStr += chunk.toString(); }); req.on("end",function(){ res.send(bodyStr); }); });
즉, 브라우저에이 보내드립니다
email=emailval&password1=pass1val&password2=pass2val
각 경로에서이 반복을 작성하지 않아도하지만 그것은 사용 미들웨어에 아마 좋습니다.
-
5.익스프레스 4 사용자를위한 참고 사항 :
익스프레스 4 사용자를위한 참고 사항 :
당신이 시도하고있는 경우 풋 app.use (express.bodyParser ()); 당신이 당신의 Express 서버를 시작하려고 할 때 응용 프로그램에 다음과 같은 오류가 발생합니다 :
그런 다음, NPM 별도로 패키지 본체 파서를 설치하려면 다음합니다 (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(); })
-
6.어떤 형태를 감안할 때 :
어떤 형태를 감안할 때 :
<form action='/somepath' method='post'> <input type='text' name='name'></input> </form>
Express를 사용하여
app.post('/somepath', function(req, res) { console.log(JSON.stringify(req.body)); console.log('req.body.name', req.body['name']); });
산출:
{"name":"x","description":"x"} req.param.name x
-
7.백엔드 :
백엔드 :
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); });
프런트 엔드 :
fetch("/api/courses", { method: 'POST', body: JSON.stringify({ hi: 'hello' }), // convert Js object to a string headers: new Headers({ "Content-Type": "application/json" }) // add headers });
-
8.
app.use(express.bodyParser());
그런 다음 app.post 요청에 대해 당신은 req.body를 통해 포스트 값을 얻을 수 있습니다. {포스트 요청 변수를}.
-
9.다음의 미들웨어는 익스프레스에서 제거됩니다.
다음의 미들웨어는 익스프레스에서 제거됩니다.
당신은 당신이 한 직접 같은 미들웨어를 사용하는 경우에 3.0를 표현한다. 다음과 같은 오류가 발생합니다 :
Error: Most middleware (like urlencoded) is no longer bundled with Express and must be installed separately.
그 미들웨어를 활용하기 위해, 지금 당신은 개별적으로 각각의 미들웨어 NPM 할 필요가있다.
되지 않는 것으로 bodyParser가 표시되기 때문에, 그래서 무서운, 연결 - 다자간 같은 JSON,를 urlencode 및 다중 파서를 사용하여 다음과 같은 방법을 추천합니다. (여러 부분 미들웨어 아니라 중단된다).
또한 단지를 urlencode의 +의 JSON을 정의, 기억, 양식 데이터는 구문 분석되지 않고 req.body은 정의되지 않습니다. 당신은 미들웨어 핸들에게 다중 요청을 정의 할 필요가있다.
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);
-
10.답변의 대부분은 익스프레스, bodyParser에 사용되기 때문에, 연결; 다중은 어디에 사용되지 않습니다. 쉽게 포스트 다중 객체를 보낼 수있는 안전한 방법이있다.
답변의 대부분은 익스프레스, bodyParser에 사용되기 때문에, 연결; 다중은 어디에 사용되지 않습니다. 쉽게 포스트 다중 객체를 보낼 수있는 안전한 방법이있다.
Multer connect.multipart이 교체로 사용될 수있다 ().
패키지를 설치하려면
$ npm install multer
앱에서로드 :
var multer = require('multer');
그리고, 다른 형태의 구문 분석 미들웨어와 함께 미들웨어 스택에 추가합니다.
app.use(express.json()); app.use(express.urlencoded()); app.use(multer({ dest: './uploads/' }));
connect.json () 핸들 애플리케이션 / JSON
connect.urlencoded () 핸들 애플리케이션 / x-www-form-urlencoded를
호로 () 멀티 핸들 / 폼 데이터
-
11.나는이 정확한 문제를 찾고 있었다. 나는 위의 모든 조언을 다음했지만 req.body는 여전히 빈 개체 {} 복귀했다. 내 경우에는, 그것은 바로 HTML이 잘못 인 것으로 간단하게 무언가이었다.
나는이 정확한 문제를 찾고 있었다. 나는 위의 모든 조언을 다음했지만 req.body는 여전히 빈 개체 {} 복귀했다. 내 경우에는, 그것은 바로 HTML이 잘못 인 것으로 간단하게 무언가이었다.
양식의 HTML에서, 당신이 당신의 입력 태그뿐만 아니라 'ID를' '이름'속성을 사용하십시오. 그렇지 않으면, 아무것도 구문 분석하지 않습니다.
<input id='foo' type='text' value='1'/> // req = {} <input id='foo' type='text' name='foo' value='1' /> // req = {foo:1}
내 바보 실수는 당신의 이득이다.
-
12.당신은 app.use 사용 shoudn't (express.bodyParser을 ()). BodyParser는 JSON +를 urlencoded +과, multipart의 조합이다. 여러 부분이 연결 3.0에서 제거되기 때문에이 작업을 사용 shoudn't.
당신은 app.use 사용 shoudn't (express.bodyParser을 ()). BodyParser는 JSON +를 urlencoded +과, multipart의 조합이다. 여러 부분이 연결 3.0에서 제거되기 때문에이 작업을 사용 shoudn't.
이 문제를 해결하려면, 당신은이 작업을 수행 할 수 있습니다 :
app.use(express.json()); app.use(express.urlencoded());
app.use (app.router)는 JSON 후 사용 urlencoded를해야한다는 키우면 매우 중요 알고, 그렇지 않으면 작동하지 않습니다!
-
13.요청이 나를 위해 일한 스트리밍
요청이 나를 위해 일한 스트리밍
req.on('end', function() { var paramstring = postdata.split("&"); }); var postdata = ""; req.on('data', function(postdataChunk){ postdata += postdataChunk; });
-
14.나는 POST와 GET 요청 모두에 대해 다음과 같은 코드를 사용하여 모든 매개 변수를 찾을 수 있습니다.
나는 POST와 GET 요청 모두에 대해 다음과 같은 코드를 사용하여 모든 매개 변수를 찾을 수 있습니다.
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)); })
-
15.Express 버전 4.16에서 작성된
Express 버전 4.16에서 작성된
라우터 함수 내부에는 포스트 변수에 액세스 req.body 속성을 사용할 수 있습니다. 이 양식의 POST 경로 인 경우 예를 들어, 어떤 당신에게 입력을 다시 보낼 것이다 :
function(req,res){ res.send(req.body); //req.body.email would correspond with the HTML <input name="email"/> }
추신 PHP를 잘 알고있는 사람들을 위해 : 액세스 PHP의 $ _GET 변수하기 위해 우리는 req.query과에를 사용하여 액세스 PHP의 $ 우리가 Node.js.에 req.body를 사용 _POST 변수
-
16.
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"); })
-
17.다음과 같이 포스트 매개 변수를 검색 할 수 있습니다 :
다음과 같이 포스트 매개 변수를 검색 할 수 있습니다 :
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'); }
-
18.당신은 방법 = GET 잘못된 방법 req.query.post의 작품 req.query.post를 사용하고, 방법은 몸 파서 후 작품을 =.
당신은 방법 = GET 잘못된 방법 req.query.post의 작품 req.query.post를 사용하고, 방법은 몸 파서 후 작품을 =.
그냥 얻을 게시물을 변경하여이 시도 :
<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>
그리고 특급 코드 사용 'app.get'
-
19.사용은 패키지 파일 업로드의 표현 :
사용은 패키지 파일 업로드의 표현 :
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'); });
-
20.당신은 HTML 형태로 POST 방식을 사용하는 경우, 당신은 즉 Node.js. 서버 측에서 req.body에서 데이터를 잡을 필요 또한 추가
당신은 HTML 형태로 POST 방식을 사용하는 경우, 당신은 즉 Node.js. 서버 측에서 req.body에서 데이터를 잡을 필요 또한 추가
var bodyParser = require('body-parser') app.use( bodyParser.json() ); app.use(bodyParser.urlencoded({extended: false}));
또는
방법에 사용 = 'GET'및 HTML과 즉 Node.js를 서버 측에서 req.query하여 데이터를 잡을
-
21.공식 문서 버전 4
공식 문서 버전 4
const express = require('express') const app = express() app.use(express.json()); app.use(express.urlencoded({ extended: true })) app.post('/push/send', (request, response) => { console.log(request.body) })
from https://stackoverflow.com/questions/5710358/how-to-retrieve-post-query-parameters by cc-by-sa and MIT license
'NODEJS' 카테고리의 다른 글
[NODEJS] 어떻게 HTTP POST 요청은 Node.js를 이루어집니다? (0) | 2020.09.16 |
---|---|
[NODEJS] 어떻게 Node.js를에 Express.js에서 GET GET (쿼리 문자열) 변수? (0) | 2020.09.16 |
[NODEJS] 어떻게 노드에 ES6 가져 오기를 사용할 수 있습니까? [복제] (0) | 2020.09.16 |
[NODEJS] 어떻게 Node.js를 시작합니까 [마감] (0) | 2020.09.16 |
[NODEJS] 디렉토리 변경 명령 CD는 ..not 설치 NPM 후 배치 파일에서 작업 (0) | 2020.09.16 |