Cách gửi mảng trong tham số truy vấn Node js

Là nhà phát triển JavaScript, bạn sẽ thường xuyên cần tạo URL và tham số chuỗi truy vấn. Một cách hợp lý để xây dựng tham số chuỗi truy vấn là sử dụng đối tượng một lớp với các cặp giá trị chính

Trong hướng dẫn này, chúng tôi sẽ đề cập đến nhiều cách khác nhau để biến một đối tượng như thế này

var params = {
    a: 1,
    b: 2,
    c: 3
};

thành một chuỗi truy vấn như thế này

"a=1&b=2&c=3"

sở thích

Được đăng trong những sở thích này

Đặt mua

JavaScript

h/javascript • 27 hướng dẫn

Đặt mua

webdev

h/webdev • 60 hướng dẫn

1

Nếu bạn đang sử dụng trình duyệt [hoặc nút] hiện đại, bạn có thể sử dụng

var queryString = Object.keys[params].map[key => key + '=' + params[key]].join['&'];
2 để tạo một mảng các chuỗi như
var queryString = Object.keys[params].map[key => key + '=' + params[key]].join['&'];
3, sau đó sử dụng
var queryString = Object.keys[params].map[key => key + '=' + params[key]].join['&'];
4 để nối chúng cùng với
"a=1&b=2&c=3"
0

ES6

var queryString = Object.keys[params].map[key => key + '=' + params[key]].join['&'];

ES5

var queryString = Object.keys[params].map[function[key] {
    return key + '=' + params[key]
}].join['&'];

2

Nếu bạn là kiểu người sử dụng jQuery, bạn đã có sẵn một giải pháp

var queryString = $.param[params];

3

Nếu bạn đang sử dụng nút, bạn có thể sử dụng mô-đun chuỗi truy vấn

const querystring = require['querystring'];

let queryString = querystring.stringify[params];

4

Nếu bạn biết khóa và giá trị của mình cần được mã hóa, bạn nên sử dụng

"a=1&b=2&c=3"
1 như thế này

________số 8

Cũng có thể truy vấn theo dấu thời gian trong MySQL

Chia sẻ

FacebookRedditTwitterPinterestEmailText message

Yêu thích

TIẾP THEO

Cách chỉ định các tham số chỉ dành cho vị trí trong Python

Gioan [304]

Ngày 11 tháng 8 năm 2021

0

Nếu bạn đã quen thuộc với các đối số chỉ chứa từ khóa của Python, thì có lẽ bạn đã tự hỏi tại sao lại không tồn tại ràng buộc tương tự đối với các đối số vị trí. Điều này thay đổi với Python 3

Câu trả lời. Không có cách nào "đúng". Nó phụ thuộc khá nhiều vào môi trường thời gian chạy của bạn [ngôn ngữ, khung, nền tảng]. Hãy xem một số môi trường phổ biến xử lý nó như thế nào

PHP

Trong PHP, bạn có thể mã hóa bằng http_build_query

$params = [
  'dog' => ['name' => 'John', 'age' => 12], 
  'user_ids' => [1, 3]
];
urldecode[http_build_query[$params]];
// Gives you: "dog[name]=John&dog[age]=12&user_ids[0]=1&user_ids[1]=3"

[Ghi chú. Tôi là

$params = [
  'dog' => ['name' => 'John', 'age' => 12], 
  'user_ids' => [1, 3]
];
urldecode[http_build_query[$params]];
// Gives you: "dog[name]=John&dog[age]=12&user_ids[0]=1&user_ids[1]=3"
3-ing nên đầu ra rất dễ đọc. ]

Vì vậy, PHP làm phẳng khá nhiều mảng/đối tượng bằng các khóa được lồng trong dấu ngoặc vuông. Hỗ trợ mảng/đối tượng đa chiều

"a=1&b=2&c=3"
1

Làm thế nào về giải mã? . Nó hỗ trợ định dạng tương tự được trả về

$params = [
  'dog' => ['name' => 'John', 'age' => 12], 
  'user_ids' => [1, 3]
];
urldecode[http_build_query[$params]];
// Gives you: "dog[name]=John&dog[age]=12&user_ids[0]=1&user_ids[1]=3"
4

"a=1&b=2&c=3"
3

$params = [
  'dog' => ['name' => 'John', 'age' => 12], 
  'user_ids' => [1, 3]
];
urldecode[http_build_query[$params]];
// Gives you: "dog[name]=John&dog[age]=12&user_ids[0]=1&user_ids[1]=3"
5 cũng không phiền nếu bạn bỏ qua các phím số nguyên cho danh sách [tức là mảng, không phải đối tượng]

"a=1&b=2&c=3"
5

Khá đơn giản, phải không?

JavaScript

JavaScript trong trình duyệt cung cấp cho bạn API tuyệt vời này có tên là URLSearchParams, trong khi Node. js cung cấp cho bạn mô-đun chuỗi truy vấn. Hãy thử mã hóa

Đầu tiên trong trình duyệt

"a=1&b=2&c=3"
6

"[đối tượng+Đối tượng]"? . Nó chuyển giá trị được cung cấp của bạn thành một chuỗi.

$params = [
  'dog' => ['name' => 'John', 'age' => 12], 
  'user_ids' => [1, 3]
];
urldecode[http_build_query[$params]];
// Gives you: "dog[name]=John&dog[age]=12&user_ids[0]=1&user_ids[1]=3"
6 của một đối tượng chung trả về "[đối tượng đối tượng]"

Cũng thế. có vẻ như nó đã xử lý tham số mảng, nhưng không phải vậy.

$params = [
  'dog' => ['name' => 'John', 'age' => 12], 
  'user_ids' => [1, 3]
];
urldecode[http_build_query[$params]];
// Gives you: "dog[name]=John&dog[age]=12&user_ids[0]=1&user_ids[1]=3"
6 của một mảng sẽ trả về các giá trị được nối bằng dấu phẩy. Để kiểm tra điều này, nếu bạn thử gọi
$params = [
  'dog' => ['name' => 'John', 'age' => 12], 
  'user_ids' => [1, 3]
];
urldecode[http_build_query[$params]];
// Gives you: "dog[name]=John&dog[age]=12&user_ids[0]=1&user_ids[1]=3"
8, bạn sẽ nhận được một mảng chứa chuỗi "1,3" dưới dạng một mục, thay vì một mảng có hai mục riêng biệt

Tuy nhiên, URLSearchParams có hỗ trợ mảng. Nhưng bạn cần phải "nối" chúng cùng một lúc. Trong trường hợp của chúng tôi, đây sẽ là

"a=1&b=2&c=3"
0

Tôi chắc chắn không thích điều đó. 😕 Ngại gì mà đến Node. js

"a=1&b=2&c=3"
1

Hà. Có vẻ như nó chỉ bỏ qua đối tượng

$params = [
  'dog' => ['name' => 'John', 'age' => 12], 
  'user_ids' => [1, 3]
];
urldecode[http_build_query[$params]];
// Gives you: "dog[name]=John&dog[age]=12&user_ids[0]=1&user_ids[1]=3"
9. Vâng, các tài liệu giải thích

Nó tuần tự hóa các loại giá trị sau được truyền trong obj.

"a=1&b=2&c=3"
10. Bất kỳ giá trị đầu vào nào khác sẽ bị ép thành chuỗi trống

chào. Tốt hơn

"a=1&b=2&c=3"
11, tôi đoán vậy. ¯\_[ツ]_/¯

Đối với mảng,

"a=1&b=2&c=3"
12 tuân theo URLSearchParams, chỉ có điều nó không yêu cầu bạn nối thêm các mục riêng lẻ

Được rồi, còn việc giải mã thì sao?

trình duyệt

"a=1&b=2&c=3"
6

Nút

"a=1&b=2&c=3"
7

Hành vi khá giống nhau

Bạn có thể thử giải mã chuỗi truy vấn kiểu PHP, nhưng nó sẽ không hoạt động theo cách bạn mong đợi. Tất cả các khóa sẽ được trả về nguyên trạng

$params = [
  'dog' => ['name' => 'John', 'age' => 12], 
  'user_ids' => [1, 3]
];
urldecode[http_build_query[$params]];
// Gives you: "dog[name]=John&dog[age]=12&user_ids[0]=1&user_ids[1]=3"
0
$params = [
  'dog' => ['name' => 'John', 'age' => 12], 
  'user_ids' => [1, 3]
];
urldecode[http_build_query[$params]];
// Gives you: "dog[name]=John&dog[age]=12&user_ids[0]=1&user_ids[1]=3"
1

Nếu bạn thử phân tích cú pháp các tham số truy vấn mảng kiểu JS bằng PHP, nó cũng bị lỗi. Bạn chỉ nhận được giá trị cuối cùng

$params = [
  'dog' => ['name' => 'John', 'age' => 12], 
  'user_ids' => [1, 3]
];
urldecode[http_build_query[$params]];
// Gives you: "dog[name]=John&dog[age]=12&user_ids[0]=1&user_ids[1]=3"
2

Nhưng có một sự thay đổi. . Vì vậy, đó là hai cách khác nhau [với sự khác biệt tinh tế] để làm việc với các tham số truy vấn trong Node. js

Và hãy nhớ những gì tôi đã nói về nó là khuôn khổ cụ thể? . js không hỗ trợ các tham số truy vấn kiểu PHP, nhưng Express [một Node. js] không. Express phân tích chính xác

"a=1&b=2&c=3"
13 thành một đối tượng và một mảng. Vì vậy, yeah, nó không chỉ là một thứ ngôn ngữ

Ồ, và đây chỉ là một số cách tiếp cận khả thi. Có những thứ khác mà tôi không đề cập đến, như mã hóa JSON đối tượng và đặt nó vào URL

Làm gì khi xây dựng backend?

Trước hết, có lẽ nên thông minh để tránh phải sử dụng các tham số truy vấn mảng hoặc đối tượng khi bạn có thể. Điều đó nói rằng, đôi khi bạn không thể. Trong trường hợp như vậy, cách tốt nhất của bạn là chọn một kế hoạch, truyền đạt nó và bám sát nó.

Để chọn một lược đồ, hãy tìm hiểu xem hệ thống nào hoạt động trong khuôn khổ hoặc ngôn ngữ của bạn bằng cách chạy các bài kiểm tra đơn giản như các bài kiểm tra ở trên👆. [Đừng quên test từ frontend

nếu đó là cách dịch vụ của bạn sẽ được sử dụng. ]

Ngoài ra, bạn có thể lập sơ đồ của riêng mình. Đó thường không phải là một ý tưởng hay, nhưng sẽ tốt hơn nếu nhu cầu của bạn đơn giản. Chẳng hạn, nếu bạn chỉ cần một danh sách các chuỗi, bạn có thể chỉ định tham số là một chuỗi thông thường được phân tách bằng dấu phẩy và trên máy chủ của bạn, bạn cố tình tách chuỗi bằng dấu phẩy để tạo mảng của mình. Bằng cách đó, bạn không phải lo lắng về khuôn khổ

Và sau đó giao tiếp. Cho người tiêu dùng của bạn biết bạn đang sử dụng định dạng nào. Nếu bạn đang xây dựng một API, hãy đưa ra các ví dụ trong tài liệu API của bạn. Bằng cách đó, họ có thể biết không dựa vào bất kỳ khuôn khổ nào mà khách hàng của họ được xây dựng trên đó mà tự xử lý việc mã hóa khung này

Cuối cùng, dính vào nó. Dù bạn chọn sơ đồ nào, hãy nhất quán với nó trong toàn bộ chương trình phụ trợ của bạn

Này👋. Tôi viết về những thách thức kỹ thuật phần mềm thú vị. Bạn muốn được cập nhật khi tôi xuất bản bài viết mới? . ứng dụng/blog. shalvah. tôi

[Lời thú tội. Tôi đã xây dựng xúc tu. ✋ Nó giúp bạn giữ hộp thư đến sạch sẽ bằng cách kết hợp các blog yêu thích của bạn vào một bản tin hàng tuần. ]

Chủ Đề