2011-01-03 21 views
12

Tôi đã có đoạn mã sau, nhưng nó dường như không làm việc:Node.js - Gửi và nhận Array như GET/POST sử dụng chuỗi truy vấn

var post_req = { 
    array: [ 
     [ { 
      param1: 'something', 
      param2: 123 
     } ], 
     [ ], 
     [ ], 
     [ { 
      param2: 'something', 
      param4: 1234, 
      param1: 'hello' 
     } ] 
    ] 
}; 
var data_send = querystring.stringify(post_req); 

var request = client.request('POST', '/', headers); 
request.end(data_send); 

if(req.method == 'POST') { 
    req.addListener('data', function(chunk) 
    { 
     POST = querystring.parse(chunk); 
     console.log(POST); 
    } 
} 

tôi kết thúc với 5 mảng phụ, tương ứng với 5 tham số trong đối tượng nhưng có thêm '] [' ký tự trong tên của chúng:

{ array: 
    [ { '][param1': 'something' } 
    , { '][param2': '123' } 
    , { '][param2': 'something' } 
    , { '][param4': '1234' } 
    , { '][param1': 'hello' } 
    ] 
} 
+0

Có vẻ như mô-đun chuỗi truy vấn của nút không được thiết kế để xử lý mảng lồng nhau (có thể là mảng trống). Nếu đó là yêu cầu POST, bạn có thể sử dụng JSON.stringify và JSON.parse thay thế? – RandomEtc

Trả lời

10

Có một gói nút mới, có thể chữa này: "NPM cài đặt qs".

https://github.com/visionmedia/node-querystring

"chuỗi truy vấn phân tích cú pháp cho nút hỗ trợ làm tổ, vì nó đã bị xóa khỏi 0.3.x, vì vậy thư viện này cung cấp các hành vi trước và thường mong muốn (và nhanh gấp hai lần)"

Nếu bất cứ ai có thể cho tôi biết lý do tại sao nó bị xóa khỏi 0.3.x, tôi sẽ cung cấp cho bạn một ý kiến ​​cho bình luận của bạn. (Tôi muốn sự tự tin của tôi trong Node.js được khôi phục.)

6

Để xác nhận nhận xét trên, chức năng querystring.stringify của nút sẽ không xử lý các mảng lồng nhau (tại thời điểm viết).

Bạn có thể thấy nguồn gốc của stringify tại https://github.com/ry/node/blob/master/lib/querystring.js

Lưu ý rằng nó xử lý một mức độ mảng nhưng nó không recurse. Khi nó tìm thấy một mảng, nó sử dụng stringifyPrimitive để mã hóa các giá trị của mảng. Bạn có thể thấy rằng stringifyPrimitive không xử lý mảng, chỉ số, boolean và chuỗi.

Như tôi đã đề xuất trong nhận xét của tôi, với điều kiện bạn đang sử dụng yêu cầu POST, ý tưởng tốt hơn là sử dụng mã hóa JSON cho cấu trúc dữ liệu phức tạp của bạn.

Hoặc sử dụng https://github.com/visionmedia/node-querystring theo đề nghị của @FriendlyDev

5

Không sử dụng querystring.parse để tạo lại đối tượng JSON được gửi dưới dạng chuỗi. Sử dụng JSON.parse thay thế. Và sử dụng JSON.stringify thay vì querystring.stringify

chuỗi truy vấn hữu ích khi bạn gửi thông số được mã hóa trong url hoặc khi bạn đăng biểu mẫu. Nhưng không có điểm trong việc sử dụng nó nếu bạn chỉ gửi một đối tượng JSON với tất cả dữ liệu của bạn.

Trong trường hợp của bạn, tôi sẽ loại bỏ thư viện chuỗi truy vấn và sử dụng thư viện JSON, thư viện này đã được bao gồm. Nó sẽ sạch hơn và nhanh hơn.

http://www.json.org/js.html

Các vấn đề liên quan