Request: рдлреЙрд░реНрдо рдореЗрдВ рдЦрд╛рд▓реА рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдкреЛрд╕реНрдЯ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 15 рдЕрдЧре░ 2017  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: request/request

рд╕рд╛рд░рд╛рдВрд╢


рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдкреЛрд╕реНрдЯ рдХрд░рддреЗ рд╕рдордп рдкреНрд░рдкрддреНрд░ рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рд╣реИред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдмреБрд░рд╛ рд╣реИ, рдпрд╣ рдлреЙрд░реНрдо рд╕реЗ рдЧреБрдгреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред
рдореИрдВ рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рдПрдХ рд╕рд░рдгреА рд░рдЦрдиреЗ рд╡рд╛рд▓реА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЦрд╛рд▓реА рд╣реЛ рд╕рдХрддреА рд╣реИред
рд╣рд░ рдмрд╛рд░ рдЬрдм рд╕рд░рдгреА рдЦрд╛рд▓реА рд╣реЛрддреА рд╣реИ рддреЛ рдПрдХ MissingPropertyError рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдЧрд▓рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЦрд╛рд▓реА рд╕рд░рдгреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдореВрд▓реНрдп рд░рдЦрддреА рд╣реИред

рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг

const request = require( 'request' )
const bodyParser = require('body-parser')
const app = require('express')()

app.use( bodyParser.json() )
app.use( bodyParser.urlencoded( { extended: true } ) )

app.post('/', function( req, res ){
    console.log( 'received:', req.body )
    res.send('ok')
})
app.listen( 53153 )

const req = {
    url: 'http://localhost:53153',
    method: 'POST',
    headers: {
        'Content-Type' : 'application/x-www-form-urlencoded'
    },
    form: {
        emptyArray: [],
        filledArray: [{something:[]}]
    }
}
console.log( 'sending:', req )
request( req , function( err, httpResponse, body ){
    process.exit(0)
})

рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░




рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдкреНрд░реЗрд╖рдг рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡реИрдз рдЬреЗрд╕рди рд╣реИ

$ node index.js
sending: { url: 'http://localhost:53153',
  method: 'POST',
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  form: { emptyArray: [], filledArray: [ { something: [] } ] }
received: { emptyArray: [], filledArray: [ { something: [] } ] }

рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░



рдкреНрд░рд╛рдкреНрдд рд╡рд╕реНрддреБ рдХреЛ рдПрдХ рдЦрд╛рд▓реА рд╡рд╕реНрддреБ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рд╡рд╛рдпрд░рд╢рд░реНрдХ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рд╕рд╛рдордЧреНрд░реА-рд▓рдВрдмрд╛рдИ рднреЗрдЬреА рдЬрд╛ рд░рд╣реА рд╣реИ 0.

$ node index.js
sending: { url: 'http://localhost:53153',
  method: 'POST',
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  form: { emptyArray: [], filledArray: [ { something: [] } ] }
received: {}

рд╕рд░рдгреА рдореЗрдВ рдЕрд╢рдХреНрдд рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ:

$ node index.js
sending: { url: 'http://localhost:53153',
  method: 'POST',
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  form: { emptyArray: [ null ], filledArray: [ { something: [ null ] } ] }
received: { emptyArray: [ '' ], filledArray: [ { something: [ '' ] } ] }

рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ:

$ node index.js
sending: { url: 'http://localhost:53153',
  method: 'POST',
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  form: { emptyArray: [ undefined ], filledArray: [ { something: [ undefined ] } ] }
received: {}

рд╕рдВрднрд╛рд╡рд┐рдд рд╕реНрдерд┐рддрд┐


рд╕рдВрджрд░реНрдн


рдЖрдкрдХрд╛ рдкрд░реНрдпрд╛рд╡рд░рдг

| рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ | рд╕рдВрд╕реНрдХрд░рдг
| ---------------- | --------
| рдЕрдиреБрд░реЛрдз | 2.81.0
| рдиреЛрдб | 8.3.0
| рдПрдирдкреАрдПрдо | 5.1.0
| рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо | рдЙрдмрдВрдЯреВ 16.04.2 рдПрд▓рдЯреАрдПрд╕

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЗрд╕ рдкрд░ рдХреЛрдИ рдЗрдирдкреБрдЯ рдирд╣реАрдВ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдЙрддреНрддрд░ рдЕрдорд╛рдиреНрдп рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИред рдЬрдм рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рд╢реНрди "рдПрдкреНрд▓рд┐рдХреЗрд╢рди/x-www-form-urlencoded" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рддреЛ рд╣рдо "рдПрдкреНрд▓рд┐рдХреЗрд╢рди/рдЬреЗрд╕рди" рдХреЗ рд▓рд┐рдП рдирдореВрдирд╛ рдХреНрдпреЛрдВ рдкреНрд░рджрд╛рди рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рд╣реЛ рд░рд╣реА рд╣реИ рд▓реЗрдХрд┐рди рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рдЦрд╛рд▓реА рд╕рд░рдгрд┐рдпрд╛рдБ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдВрдЧреА рдФрд░ url-рдПрдиреНрдХреЛрдбреЗрдб-рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдХреБрдЫ рднреА 'рд╢реВрдиреНрдп' рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред

рдХрд╛ рдПрдХ рдЬреЗрд╕рди:
{ results: { arr1: [], arr2: undefined, arr3: null, foo: { arr4: [] } } }
рдХреЗрд╡рд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдпреВрдЖрд░рдПрд▓ рджреЗрдЧрд╛
"?results%5Barr3%5D="

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рддреЛ, рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ JSON рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдиреБрд░реЛрдз рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЬрдм рдЖрдк 'рдлреЙрд░реНрдо' рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрддрд╛ рд╣реИред JSON рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬрд┐рд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рд╡рд╣ рдЦрд╛рд▓реА рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддреА рд╣реИред рдЖрдкрдХреЛ 'рдлреЙрд░реНрдо' рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдореЗрдВ рдкрд╛рд╕ рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп 'рдмреЙрдбреА' рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдФрд░ JSON.stringify рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдиреЗ JSON рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

рдиреЛрдЯ: рдЖрдкрдХреЛ рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдЧрдбрд╝рдмрдбрд╝ рдХрд░рдиреА рдкрдбрд╝ рд╕рдХрддреА рд╣реИ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди/рдЬреЗрд╕рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

{
    url: 'http://localhost:53153',
    method: 'POST',
    headers: { 'Content-Type': 'application/json'},
    body: JSON.stringify({ emptyArray: [], filledArray: [ { something: [] } ] })
}

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЗрд╕ рдкрд░ рдХреЛрдИ рдЗрдирдкреБрдЯ рдирд╣реАрдВ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдЙрддреНрддрд░ рдЕрдорд╛рдиреНрдп рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИред рдЬрдм рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рд╢реНрди "рдПрдкреНрд▓рд┐рдХреЗрд╢рди/x-www-form-urlencoded" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рддреЛ рд╣рдо "рдПрдкреНрд▓рд┐рдХреЗрд╢рди/рдЬреЗрд╕рди" рдХреЗ рд▓рд┐рдП рдирдореВрдирд╛ рдХреНрдпреЛрдВ рдкреНрд░рджрд╛рди рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рд╣реЛ рд░рд╣реА рд╣реИ рд▓реЗрдХрд┐рди рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рдЦрд╛рд▓реА рд╕рд░рдгрд┐рдпрд╛рдБ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдВрдЧреА рдФрд░ url-рдПрдиреНрдХреЛрдбреЗрдб-рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдХреБрдЫ рднреА 'рд╢реВрдиреНрдп' рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред

рдХрд╛ рдПрдХ рдЬреЗрд╕рди:
{ results: { arr1: [], arr2: undefined, arr3: null, foo: { arr4: [] } } }
рдХреЗрд╡рд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдпреВрдЖрд░рдПрд▓ рджреЗрдЧрд╛
"?results%5Barr3%5D="

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

lupo9557 picture lupo9557  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

codecowboy picture codecowboy  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

chenby picture chenby  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Aranir picture Aranir  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

keller35 picture keller35  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ