الفرق بين المراجعتين ل"Node.js/querystring"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(إنشاء الصفحة)
 
ط (استبدال النص - '\[\[تصنيف:(.*)\]\]' ب'{{SUBPAGENAME}}')
 
(6 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
 
{{DISPLAYTITLE:الوحدة Query String في Node.js}}
 
{{DISPLAYTITLE:الوحدة Query String في Node.js}}
 
 
توفر الوحدة <code>querystring</code> مجموعة من الأدوات لتحليل وتنسيق سلاسل الاستعلامات في الروابط (URL query strings). يُمكِن استيراد الوحدة والبدء باستخدامها عبر تنفيذ:<syntaxhighlight lang="javascript">
 
توفر الوحدة <code>querystring</code> مجموعة من الأدوات لتحليل وتنسيق سلاسل الاستعلامات في الروابط (URL query strings). يُمكِن استيراد الوحدة والبدء باستخدامها عبر تنفيذ:<syntaxhighlight lang="javascript">
 
const querystring = require(‘querystring’);
 
const querystring = require(‘querystring’);
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== querystring.escape(str)‎ ==
+
== <code>querystring.escape(str)‎</code> ==
<small>أُضيفَ في الإصدار 0.1.25</small>
+
<small>أُضيفَ في الإصدار 0.1.25.</small>
 
+
*<code>str</code> من النوع [[JavaScript/String|<string>]].
المُعامِلات (Parameters):
 
# <code>str</code> [[JavaScript/String|<string>]]
 
 
يرمِّز هذا التابع المحارِف المُمرَّرة للمُعامِل الأوَّل <code>str</code> [https://ar.wikipedia.org/wiki/%D8%AA%D8%B1%D9%85%D9%8A%D8%B2_%D8%A7%D9%84%D9%86%D8%B3%D8%A8%D8%A9_%D8%A7%D9%84%D9%85%D8%A6%D9%88%D9%8A%D8%A9 بترميز النسبة المئويّة] لتحويله إلى سلسلة استعلامات صالحة. مثال:<syntaxhighlight lang="javascript">
 
يرمِّز هذا التابع المحارِف المُمرَّرة للمُعامِل الأوَّل <code>str</code> [https://ar.wikipedia.org/wiki/%D8%AA%D8%B1%D9%85%D9%8A%D8%B2_%D8%A7%D9%84%D9%86%D8%B3%D8%A8%D8%A9_%D8%A7%D9%84%D9%85%D8%A6%D9%88%D9%8A%D8%A9 بترميز النسبة المئويّة] لتحويله إلى سلسلة استعلامات صالحة. مثال:<syntaxhighlight lang="javascript">
 
querystring.escape("foo=bar&bar=foo");
 
querystring.escape("foo=bar&bar=foo");
 
// 'foo%3Dbar%26bar%3Dfoo'
 
// 'foo%3Dbar%26bar%3Dfoo'
</syntaxhighlight>يُستخدَم التابع <code>querystring.escape()‎</code> عبر التابع <code>querystring.stringify()‎</code> ولا يتوقع منه أن يستدعى مباشرةً. يُستخدَم هذا التابِع عادةً لتوفير آلية بديلة تقوم بعمليّة ترميز النسبة المئويّة إن لزم الأمر. يتم ذلك عبر إسناد الخاصيّة <code>querystring.escape</code> إلى دالة بديلة.
+
</syntaxhighlight>يُستخدَم التابع <code>querystring.escape()‎</code> عبر التابع <code>[[Node.js/querystring#querystring.stringify.28obj.5B.2C sep.5B.2C eq.5B.2C options.5D.5D.5D.29.E2.80.8E|querystring.stringify()‎]]</code> ولا يتوقع منه أن يستدعى مباشرةً. يُستخدَم هذا التابِع عادةً لتوفير آلية بديلة تقوم بعمليّة ترميز النسبة المئويّة إن لزم الأمر. يتم ذلك عبر إسناد الخاصيّة <code>querystring.escape</code> إلى دالة بديلة.
  
== querystring.parse(str[, sep[, eq[, options]]])‎ ==
+
== <code>querystring.parse(str[, sep[, eq[, options]]])‎</code> ==
 
{| class="mw-collapsible wikitable"
 
{| class="mw-collapsible wikitable"
 
|+ سجل التغييرات
 
|+ سجل التغييرات
سطر 26: سطر 23:
 
|-
 
|-
 
| 6.0.0
 
| 6.0.0
| الكائن الذي يُعيده التابع لم يعد يَرِث خصائص الكائِن <code>Object.prototype</code>.
+
| الكائن الذي يُعيده التابع لم يعد يَرِث خصائص الكائِن <code>[[JavaScript/Object/prototype|Object.prototype]]</code>.
 
|-
 
|-
 
| 4.2.4، 6.0.0
 
| 4.2.4، 6.0.0
سطر 34: سطر 31:
 
| أُضيفَ في الإصدار 0.1.25.
 
| أُضيفَ في الإصدار 0.1.25.
 
|}
 
|}
المُعامِلات:
+
 
# <code>str</code> [[JavaScript/String|<string>]]: سلسلة الاستعلامات لتحليلها.
+
* <code>str</code> من النوع [[JavaScript/String|<string>]]: سلسلة الاستعلامات لتحليلها.
# <code>str</code> [[JavaScript/String|<string>]]: السلسلة النصيّة الفرعيّة المُستخدمة لِفَصِل أزواج القيم والمفاتيح عن بعضها في سلسلة الاستعلامات. '''القيمة الافتراضيّة''': <code>'&'</code>.
+
* <code>str</code> من النوع [[JavaScript/String|<string>]]: السلسلة النصيّة الفرعيّة المُستخدمة لِفَصِل أزواج القيم والمفاتيح عن بعضها في سلسلة الاستعلامات. '''القيمة الافتراضيّة''': <code>'&'</code>.
# <code>‎eq</code> [[JavaScript/String|<string>]]‎‎: السلسلة النصيّة الفرعيّة المُستخدمة لِفَصِل القيم والمفاتيح عن بعضها في سلسلة الاستعلامات. '''القيمة الافتراضيّة''': <code>'='</code>.
+
* <code>eq</code> من النوع [[JavaScript/String|<string>]]: السلسلة النصيّة الفرعيّة المُستخدمة لِفَصِل القيم والمفاتيح عن بعضها في سلسلة الاستعلامات. '''القيمة الافتراضيّة''': <code>'='</code>.
# <code>options</code> [[JavaScript/Object|<Object>]]:
+
*<code>options</code> من النوع [[JavaScript/Object|<Object>]]:
## <code>decodeURIComponent</code> [[JavaScript/Function|<Function>]]‎‎: الدالة المُستخدمة لإجراء عمليّة فك ترميز النسبة المئويّة في سلسلة الاستعلامات. '''القيمة الافتراضيّة''': <code>querystring.unescape()‎‎</code>.
+
** <code>decodeURIComponent</code> من النوع [[JavaScript/Function|<Function>]]: الدالة المُستخدمة لإجراء عمليّة فك ترميز النسبة المئويّة في سلسلة الاستعلامات. '''القيمة الافتراضيّة''': <code>[[Node.js/querystring#querystring.unescape.28str.29.E2.80.8E|querystring.unescape()‎‎]]</code>.
## <code>maxKeys</code> [[JavaScript/Number|<number>]]: يُحدد الحد الأقصى للمفاتيح التي ستُحلَّل. عيّن قيمة المُعامِل لصفر (<code>0</code>) لتعطيل هذا الخيار. '''القيمة الافتراضيّة''': <code>1000</code>.
+
** <code>maxKeys</code> من النوع [[JavaScript/Number|<number>]]: يُحدد الحد الأقصى للمفاتيح التي ستُحلَّل. عيّن قيمة المُعامِل لصفر (<code>0</code>) لتعطيل هذا الخيار. '''القيمة الافتراضيّة''': <code>1000</code>.
 
يعمل هذا التابع على تحليل سلسلة استعلامات (مُمرَّة عبر المُعامِل الأوَّل <code>str</code>) وتحويلها إلى أزواج من القيم والمفاتيح.
 
يعمل هذا التابع على تحليل سلسلة استعلامات (مُمرَّة عبر المُعامِل الأوَّل <code>str</code>) وتحويلها إلى أزواج من القيم والمفاتيح.
  
سطر 48: سطر 45:
 
     abc: [‘xyz’, ‘123’]
 
     abc: [‘xyz’, ‘123’]
 
}
 
}
</syntaxhighlight>الكائِن الذي يُعيده التابع <code>querystring.parse()‎</code> لا يَرِث الكائن <code>Object</code> في JavaScript عبر سلسلة prototype، ما يعني أنَّ توابع الكائن <code>Object</code>، كالتابع <code>obj.toString()‎</code> والتابع <code>obj.hasOwnProperty()‎</code>، لن تعمل إذا استدعيتها على القيمة المُعادة من هذا التابع.
+
</syntaxhighlight>الكائِن الذي يُعيده التابع <code>[[Node.js/querystring#querystring.parse.28str.5B.2C sep.5B.2C eq.5B.2C options.5D.5D.5D.29.E2.80.8E|querystring.parse()‎]]</code> لا يَرِث الكائن <code>Object</code> في JavaScript عبر سلسلة prototype، ما يعني أنَّ توابع الكائن <code>[[JavaScript/Object|Object]]</code>، كالتابع <code>[[JavaScript/Object/toString|obj.toString()‎]]</code> والتابع <code>[[JavaScript/Object/hasOwnProperty|obj.hasOwnProperty()‎]]</code>، لن تعمل إذا استدعيتها على القيمة المُعادة من هذا التابع.
  
 
يفترض هذا التابِع أنَّ المحارِف (characters) الموضوعة داخل سلسلة الاستعلامات المُرَّرة مُرمَّزة بترميز UTF-8. ينبغي عليك تمرير مُرمِّز بديل عبر المُعامِل الفرعي <code>decodeURIComponent</code> إذا أردت استخدام نوع ترميز آخر، كما هو موضَّح أدناه:<syntaxhighlight lang="javascript">
 
يفترض هذا التابِع أنَّ المحارِف (characters) الموضوعة داخل سلسلة الاستعلامات المُرَّرة مُرمَّزة بترميز UTF-8. ينبغي عليك تمرير مُرمِّز بديل عبر المُعامِل الفرعي <code>decodeURIComponent</code> إذا أردت استخدام نوع ترميز آخر، كما هو موضَّح أدناه:<syntaxhighlight lang="javascript">
سطر 56: سطر 53:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== querystring.stringify(obj[, sep[, eq[, options]]])‎ ==
+
== <code>querystring.stringify(obj[, sep[, eq[, options]]])‎</code> ==
<small>أُضيفَ في الإصدار 0.1.25</small>
+
<small>أُضيفَ في الإصدار 0.1.25.</small>
 
+
* <code>obj</code> من النوع [[JavaScript/Object|<Object>]]: الكائن الذي سيحوّل إلى سلسلة استعلامات.
المُعامِلات:
+
* <code>sep</code> من النوع [[JavaScript/String|<string>]]: السلسلة النصيّة الفرعيّة المُستخدمة لفصل أزواج القيم والمفاتيح عن بعضها في سلسلة الاستعلامات. '''القيمة الافتراضيّة''': <code>'&'</code>.
# <code>obj</code> [[JavaScript/Object|<Object>]]: الكائن الذي سيحوّل إلى سلسلة استعلامات.
+
* <code>eq</code> من النوع [[JavaScript/String|<string>]]: السلسلة النصيّة الفرعيّة المُستخدمة لفصل القيم والمفاتيح عن بعضها في سلسلة الاستعلامات. '''القيمة الافتراضيّة''': <code>'='</code>.
# <code>‎sep</code> [[JavaScript/String|<string>]]: السلسلة النصيّة الفرعيّة المُستخدمة لفصل أزواج القيم والمفاتيح عن بعضها في سلسلة الاستعلامات. '''القيمة الافتراضيّة''': <code>'&'</code>.
+
* <code>options</code>:
# <code>eq</code> [[JavaScript/String|<string>]]: السلسلة النصيّة الفرعيّة المُستخدمة لفصل القيم والمفاتيح عن بعضها في سلسلة الاستعلامات. '''القيمة الافتراضيّة''': <code>'='</code>.
+
** <code>encodeURIComponent</code> من النوع [[JavaScript/Function|<Function>]]: الدالة المُستخدمة لترميز المحارِف المتواجدة في سلسلة الاستعلامات بترميز النسبة المئويّة. '''القيمة الافتراضيّة''': <code>[[Node.js/querystring#querystring.escape.28str.29.E2.80.8E|querystring.escape()‎‎]]</code>.
# <code>options</code>:
 
## <code>encodeURIComponent</code> [[JavaScript/Function|<Function>]]: الدالة المُستخدمة لترميز المحارِف المتواجدة في سلسلة الاستعلامات بترميز النسبة المئويّة. '''القيمة الافتراضيّة''': <code>querystring.escape()‎‎</code>.
 
 
يحوِّل التابعُ <code>querystring.stringify()‎</code> الكائنَ المُمرَّر <code>obj</code> (كأول وسيط) إلى سلسلة استعلامات عبر إجراء حلقة تكراريّة على الخاصيات التابعة للكائن مباشرةً.
 
يحوِّل التابعُ <code>querystring.stringify()‎</code> الكائنَ المُمرَّر <code>obj</code> (كأول وسيط) إلى سلسلة استعلامات عبر إجراء حلقة تكراريّة على الخاصيات التابعة للكائن مباشرةً.
  
سطر 81: سطر 76:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== querystring.unescape(str)‎ ==
+
== <code>querystring.unescape(str)‎</code> ==
<small>أُضيفَ في الإصدار 0.1.25</small>
+
<small>أُضيفَ في الإصدار 0.1.25.</small>
 
+
# <code>str</code> من النوع ‎‎[[JavaScript/String|<string>]]‎.
المُعامِلات:
 
# <code>str</code> [[JavaScript/String|<string>]]‎
 
 
يجري هذا التابع عمليّة فك ترميز النسبة المئويّة للمحارِف المُدخلة عبر المُعامِل <code>str</code>. مثال:<syntaxhighlight lang="javascript">
 
يجري هذا التابع عمليّة فك ترميز النسبة المئويّة للمحارِف المُدخلة عبر المُعامِل <code>str</code>. مثال:<syntaxhighlight lang="javascript">
 
querystring.unescape("foo%3Dbar%26bar%3Dfoo");
 
querystring.unescape("foo%3Dbar%26bar%3Dfoo");
 
// 'foo=bar&bar=foo'
 
// 'foo=bar&bar=foo'
  
</syntaxhighlight>يُستخدَم التابِع <code>querystring.unescape()‎</code> عبر التابِع <code>querystring.parse()‎</code> ولا يتوقع منه أن يستدعى مباشرةً. يُستخدَم هذا التابِع عادةً لتوفير آلية بديلة تقوم بعمليّة ترميز النسبة المئويّة إن لزم الأمر؛ وذلك عبر إسناد الخاصيّة <code>querystring.unescape</code> إلى الدالة البديلة.
+
</syntaxhighlight>يُستخدَم التابِع <code>querystring.unescape()‎</code> عبر التابِع <code>[[Node.js/querystring#querystring.parse.28str.5B.2C sep.5B.2C eq.5B.2C options.5D.5D.5D.29.E2.80.8E|querystring.parse()]]‎</code> ولا يتوقع منه أن يستدعى مباشرةً. يُستخدَم هذا التابِع عادةً لتوفير آلية بديلة تقوم بعمليّة ترميز النسبة المئويّة إن لزم الأمر؛ وذلك عبر إسناد الخاصيّة <code>querystring.unescape</code> إلى الدالة البديلة.
  
يحاول التابِع <code>()querystring.unescape</code> استخدام التابِع <code>decodeURIComponent()‎</code> المبني في JavaScript لفك الترميز افتراضيًا. في حال فشل التابِع بالقيام بذلك، سيقوم باستخدام بديل مُماثِل آمن وفعّال لإنجاز المُهمة دون أن يرمي الاستثناء <code>[[JavaScript/URIError|URIError]]</code>.
+
يحاول التابِع <code>()querystring.unescape</code> استخدام التابِع <code>[[JavaScript/decodeURIComponent|decodeURIComponent()‎]]</code> المبني في JavaScript لفك الترميز افتراضيًا. في حال فشل التابِع بالقيام بذلك، سيقوم باستخدام بديل مُماثِل آمن وفعّال لإنجاز المُهمة دون أن يرمي الاستثناء <code>[[JavaScript/URIError|URIError]]</code>.
  
 
== مصادر ==
 
== مصادر ==
* صفحة [https://nodejs.org/api/querystring.html Query String] في توثيق Node.js الرسمي.
+
* [https://nodejs.org/api/querystring.html صفحة Query String في توثيق Node.js الرسمي].
 +
[[تصنيف:Node.js|{{SUBPAGENAME}}]]

المراجعة الحالية بتاريخ 11:15، 23 أكتوبر 2018

توفر الوحدة querystring مجموعة من الأدوات لتحليل وتنسيق سلاسل الاستعلامات في الروابط (URL query strings). يُمكِن استيراد الوحدة والبدء باستخدامها عبر تنفيذ:

const querystring = require(querystring);

querystring.escape(str)‎

أُضيفَ في الإصدار 0.1.25.

يرمِّز هذا التابع المحارِف المُمرَّرة للمُعامِل الأوَّل str بترميز النسبة المئويّة لتحويله إلى سلسلة استعلامات صالحة. مثال:

querystring.escape("foo=bar&bar=foo");
// 'foo%3Dbar%26bar%3Dfoo'

يُستخدَم التابع querystring.escape()‎ عبر التابع querystring.stringify()‎ ولا يتوقع منه أن يستدعى مباشرةً. يُستخدَم هذا التابِع عادةً لتوفير آلية بديلة تقوم بعمليّة ترميز النسبة المئويّة إن لزم الأمر. يتم ذلك عبر إسناد الخاصيّة querystring.escape إلى دالة بديلة.

querystring.parse(str[, sep[, eq[, options]]])‎

سجل التغييرات
الإصدار التغييرات
8.0.0 تحليل مدخلات الاستعلام المتتالية بشكل صحيح (مثال: ‎&=&=‎).
6.0.0 الكائن الذي يُعيده التابع لم يعد يَرِث خصائص الكائِن Object.prototype.
4.2.4، 6.0.0 أصبح بالإمكان تمرير طول للمُعامِل eq أكبر من 1.
0.1.25 أُضيفَ في الإصدار 0.1.25.
  • str من النوع <string>: سلسلة الاستعلامات لتحليلها.
  • str من النوع <string>: السلسلة النصيّة الفرعيّة المُستخدمة لِفَصِل أزواج القيم والمفاتيح عن بعضها في سلسلة الاستعلامات. القيمة الافتراضيّة: '&'.
  • eq من النوع <string>: السلسلة النصيّة الفرعيّة المُستخدمة لِفَصِل القيم والمفاتيح عن بعضها في سلسلة الاستعلامات. القيمة الافتراضيّة: '='.
  • options من النوع <Object>:
    • decodeURIComponent من النوع <Function>: الدالة المُستخدمة لإجراء عمليّة فك ترميز النسبة المئويّة في سلسلة الاستعلامات. القيمة الافتراضيّة: querystring.unescape()‎‎.
    • maxKeys من النوع <number>: يُحدد الحد الأقصى للمفاتيح التي ستُحلَّل. عيّن قيمة المُعامِل لصفر (0) لتعطيل هذا الخيار. القيمة الافتراضيّة: 1000.

يعمل هذا التابع على تحليل سلسلة استعلامات (مُمرَّة عبر المُعامِل الأوَّل str) وتحويلها إلى أزواج من القيم والمفاتيح.

لنأخذ سلسلة الاستعلامات هذه 'foo=bar&abc=xyz&abc=123' على سبيل المثال. ستُحلَّل هذه السلسلة إلى مجموعة الأزواج التالية:

{
    foo: bar,
    abc: [xyz, 123]
}

الكائِن الذي يُعيده التابع querystring.parse()‎ لا يَرِث الكائن Object في JavaScript عبر سلسلة prototype، ما يعني أنَّ توابع الكائن Object، كالتابع obj.toString()‎ والتابع obj.hasOwnProperty()‎، لن تعمل إذا استدعيتها على القيمة المُعادة من هذا التابع. يفترض هذا التابِع أنَّ المحارِف (characters) الموضوعة داخل سلسلة الاستعلامات المُرَّرة مُرمَّزة بترميز UTF-8. ينبغي عليك تمرير مُرمِّز بديل عبر المُعامِل الفرعي decodeURIComponent إذا أردت استخدام نوع ترميز آخر، كما هو موضَّح أدناه:

// لنفترِض أنَّ الدالة gbkDecodeURIComponent التي سنستخدمها لفك الترميز مُعرِّفة بالفعل
querystring.parse(w=%D6%D0%CE%C4&foo=bar, null, null, 
            { decodeURIComponent: gbkDecodeURIComponent });

querystring.stringify(obj[, sep[, eq[, options]]])‎

أُضيفَ في الإصدار 0.1.25.

  • obj من النوع <Object>: الكائن الذي سيحوّل إلى سلسلة استعلامات.
  • sep من النوع <string>: السلسلة النصيّة الفرعيّة المُستخدمة لفصل أزواج القيم والمفاتيح عن بعضها في سلسلة الاستعلامات. القيمة الافتراضيّة: '&'.
  • eq من النوع <string>: السلسلة النصيّة الفرعيّة المُستخدمة لفصل القيم والمفاتيح عن بعضها في سلسلة الاستعلامات. القيمة الافتراضيّة: '='.
  • options:
    • encodeURIComponent من النوع <Function>: الدالة المُستخدمة لترميز المحارِف المتواجدة في سلسلة الاستعلامات بترميز النسبة المئويّة. القيمة الافتراضيّة: querystring.escape()‎‎.

يحوِّل التابعُ querystring.stringify()‎ الكائنَ المُمرَّر obj (كأول وسيط) إلى سلسلة استعلامات عبر إجراء حلقة تكراريّة على الخاصيات التابعة للكائن مباشرةً.

يقبل التابِع أنواع القيم التالية لِتُمرَّر للمُعامِل obj: النوع <string>، و <number>، و <boolean>، و <[]string>، و <[]number>، و <[]boolean>. ستُعامَل أي قيمة مُدخلة، لذلك المُعامِل، غير مذكورة أعلاه على أنَّها سلسلة نصيّة فارغة.

querystring.stringify({ foo: bar, baz: [qux, quux], corge: ‘’ });
// ‘foo=bar&baz=qux&baz=quux&corge='

querystring.stringify({ foo: bar, baz: qux }, ;, :);
// 'foo:bar;baz:qux'

ستُرمَّز المحارِف المُدخلة في سلسلة الاستعلامات بترميز UTF-8 افتراضيًا. ينبغي عليك تمرير مُرمِّز بديل عبر المُعامِل الفرعي decodeURIComponent إذا أردت استخدام نوع ترميز آخر، كما هو موضَّح أدناه:

// لنفترِض أنَّ الدالة gbkDecodeURIComponent التي سنستخدمها لترميز المحارِف مُعرِّفة بالفعل
querystring.stringify({ w: '中文', foo: bar }, null, null, 
                 { encodeURIComponent: gbkEncodeURIComponent });

querystring.unescape(str)‎

أُضيفَ في الإصدار 0.1.25.

  1. str من النوع ‎‎<string>‎.

يجري هذا التابع عمليّة فك ترميز النسبة المئويّة للمحارِف المُدخلة عبر المُعامِل str. مثال:

querystring.unescape("foo%3Dbar%26bar%3Dfoo");
// 'foo=bar&bar=foo'

يُستخدَم التابِع querystring.unescape()‎ عبر التابِع querystring.parse() ولا يتوقع منه أن يستدعى مباشرةً. يُستخدَم هذا التابِع عادةً لتوفير آلية بديلة تقوم بعمليّة ترميز النسبة المئويّة إن لزم الأمر؛ وذلك عبر إسناد الخاصيّة querystring.unescape إلى الدالة البديلة.

يحاول التابِع ()querystring.unescape استخدام التابِع decodeURIComponent()‎ المبني في JavaScript لفك الترميز افتراضيًا. في حال فشل التابِع بالقيام بذلك، سيقوم باستخدام بديل مُماثِل آمن وفعّال لإنجاز المُهمة دون أن يرمي الاستثناء URIError.

مصادر