복붙노트

[NODEJS] 어떻게 POST 쿼리 매개 변수를 검색?

NODEJS

어떻게 POST 쿼리 매개 변수를 검색?

해결법


  1. 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. 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.참고 :이 대답은 여기 익스프레스 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. 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. 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. 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. 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. 8.

    app.use(express.bodyParser());
    

    그런 다음 app.post 요청에 대해 당신은 req.body를 통해 포스트 값을 얻을 수 있습니다. {포스트 요청 변수를}.


  9. 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. 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. 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. 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. 13.요청이 나를 위해 일한 스트리밍

    요청이 나를 위해 일한 스트리밍

    req.on('end', function() {
        var paramstring = postdata.split("&");
    });
    
    var postdata = "";
    req.on('data', function(postdataChunk){
        postdata += postdataChunk;
    });
    

  14. 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. 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. 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. 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. 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. 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. 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. 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)
    })
    
  22. from https://stackoverflow.com/questions/5710358/how-to-retrieve-post-query-parameters by cc-by-sa and MIT license