این سند، APIهای مربوط به برچسبگذاری سمت سرور را تشریح میکند.
addEventCallback
یک تابع فراخوانی (callback) ثبت میکند که در پایان یک رویداد فراخوانی میشود. این تابع فراخوانی زمانی فراخوانی میشود که تمام تگهای مربوط به رویداد اجرا شده باشند. به این تابع فراخوانی دو مقدار ارسال میشود: شناسهی کانتینری که تابع را فراخوانی میکند و یک شیء که حاوی اطلاعاتی در مورد رویداد است.
وقتی این API در یک تگ استفاده میشود، به رویداد فعلی مرتبط میشود. وقتی این API در یک کلاینت استفاده میشود، باید با استفاده از تابع bindToEvent از API مربوط به runContainer به یک رویداد خاص متصل شود. برای جزئیات بیشتر به مثال مراجعه کنید.
نحو
const addEventCallback = require('addEventCallback');
addEventCallback((containerId, eventData) => {
// Take some action based on the event data.
});
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
callback | تابع | تابعی که قرار است در پایان رویداد فراخوانی شود. |
شیء eventData شامل دادههای زیر است:
| نام کلید | نوع | توضیحات |
|---|---|---|
tags | آرایه | آرایهای از اشیاء داده تگ. هر تگی که در طول رویداد اجرا شود، یک ورودی در این آرایه خواهد داشت. شیء داده تگ شامل شناسه تگ ( id )، وضعیت اجرای آن ( status ) و زمان اجرای آن ( executionTime ) است. دادههای تگ همچنین شامل فرادادههای اضافی تگ که روی تگ پیکربندی شدهاند، خواهد بود. |
در یک کلاینت:
const addEventCallback = require('addEventCallback');
const claimRequest = require('claimRequest');
const extractEventsFromMpv1 = require('extractEventsFromMpv1');
const logToConsole = require('logToConsole');
const returnResponse = require('returnResponse');
const runContainer = require('runContainer');
claimRequest();
const events = extractEventsFromMpv1();
let eventsCompleted = 0;
events.forEach((evt, i) => {
runContainer(evt, /* onComplete= */ (bindToEvent) => {
bindToEvent(addEventCallback)((containerId, eventData) => {
logToConsole('Event Number: ' + i);
eventData.tags.forEach((tag) => {
logToConsole('Tag ID: ' + tag.id);
logToConsole('Tag Status: ' + tag.status);
logToConsole('Tag Execution Time: ' + tag.executionTime);
});
});
if (events.length === ++eventsCompleted) {
returnResponse();
}
});
});
در یک برچسب:
const addEventCallback = require('addEventCallback');
addEventCallback((containerId, eventData) => {
// This will be called at the end of the current event.
});
مجوزهای مرتبط
callLater
فراخوانی یک تابع را به صورت غیرهمزمان برنامهریزی میکند. تابع پس از بازگشت کد فعلی فراخوانی میشود. این معادل setTimeout(<function>, 0) است.
مثال
const callLater = require('callLater');
const logToConsole = require('logToConsole');
callLater(() => {
logToConsole('Logged asynchronously');
});
نحو
callLater(function)
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
function | تابع | تابعی که باید فراخوانی شود. |
مجوزهای مرتبط
هیچ کدام.
claimRequest
از این API در یک کلاینت برای دریافت درخواست استفاده کنید. پس از دریافت درخواست، کانتینر کلاینتهای اضافی را اجرا نمیکند.
این API در صورت فراخوانی در یک تگ یا متغیر، یک استثنا ایجاد میکند. این API در صورت فراخوانی پس از بازگشت کلاینت (مثلاً اگر در یک فراخوانی ناهمزمان مانند callLater یا تابع runContainer onComplete فراخوانی شود) یک استثنا ایجاد میکند.
یک کلاینت باید قبل از فراخوانی API runContainer درخواست را با استفاده از این API دریافت کند.
مثال
const claimRequest = require('claimRequest');
claimRequest();
نحو
claimRequest();
مجوزهای مرتبط
هیچ کدام.
computeEffectiveTldPlusOne
دامنه سطح بالای مؤثر + ۱ (eTLD+1) دامنه یا URL داده شده را برمیگرداند. eTLD+1 با ارزیابی دامنه در برابر قوانین فهرست پسوند عمومی محاسبه میشود. eTLD+1 معمولاً بالاترین سطح دامنهای است که میتوانید روی آن کوکی تنظیم کنید.
اگر آرگومان تهی یا تعریف نشده باشد، مقدار آرگومان بدون تغییر برگردانده میشود. در غیر این صورت، آرگومان به یک رشته تبدیل میشود. اگر آرگومان یک دامنه یا URL معتبر نباشد، یک رشته خالی برگردانده میشود. اگر سرور قادر به دریافت لیست پسوندهای عمومی نباشد، مقدار آرگومان بدون تغییر برگردانده میشود.
مثال
const computeEffectiveTldPlusOne = require('computeEffectiveTldPlusOne');
// Returns 'example.co.uk'
computeEffectiveTldPlusOne('analytics.example.co.uk');
// Returns 'example.co.uk'
computeEffectiveTldPlusOne('https://analytics.example.co.uk/path');
نحو
computeEffectiveTldPlusOne(domainOrUrl);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
domainOrUrl | رشته | دامنه یا نشانی اینترنتی (URL) که eTLD+1 روی آن محاسبه میشود. |
مجوزهای مرتبط
هیچ کدام.
createRegex
یک نمونه regex جدید ایجاد میکند و آن را به صورت پیچیده شده در یک شیء برمیگرداند. شما نمیتوانید مستقیماً به regex دسترسی داشته باشید. با این حال، میتوانید آن را به API testRegex ، String.replace() ، String.match() و String.search() ارسال کنید.
اگر عبارت منظم نامعتبر باشد یا Re2 روی سرور در دسترس نباشد، null برمیگرداند.
این API از پیادهسازی Re2 استفاده میکند. ایمیج داکر سرور باید نسخه ۲.۰.۰ یا بالاتر باشد.
مثال
const createRegex = require('createRegex');
const domainRegex = createRegex('\\w+\\.com', 'i');
// Returns '/foobar'
'example.com/foobar'.replace(domainRegex, '');
نحو
createRegex(pattern, flags);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
pattern | رشته | متن عبارت منظم. |
flags | رشته | یک رشته اختیاری حاوی پرچمهای مربوط به عبارت منظمی که ایجاد میشود. `g` (سراسری) و `i` (بدون در نظر گرفتن حروف بزرگ و کوچک) پشتیبانی میشوند. سایر کاراکترها به طور خودکار نادیده گرفته میشوند. |
مجوزهای مرتبط
هیچ کدام.
حداقل نسخه تصویر
decodeUri
هر کاراکتر رمزگذاری شده در URI ارائه شده را رمزگشایی میکند. رشتهای را برمیگرداند که نشان دهنده URI رمزگشایی شده است. در صورت ارائه ورودی نامعتبر، undefined را برمیگرداند.
مثال
const decodeUri = require('decodeUri');
const decodedUrl = decodeUri(data.encodedUrl);
if (decodedUrl) {
// ...
}
نحو
decodeUri(encoded_uri);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
encoded_uri | رشته | یک URI که توسط encodeUri() یا به روشهای دیگر کدگذاری شده است. |
مجوزهای مرتبط
هیچ کدام.
decodeUriComponent
هر کاراکتر رمزگذاری شده در مؤلفه URI ارائه شده را رمزگشایی میکند. رشتهای را برمیگرداند که نشان دهنده مؤلفه URI رمزگشایی شده است. در صورت دریافت ورودی نامعتبر undefined را برمیگرداند.
مثال
const decodeUriComponent = require('decodeUriComponent');
const decodedQuery = decodeUriComponent(data.query);
if (decodedQuery) {
// ...
}
نحو
decodeUriComponent(encoded_uri_component);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
encoded_uri_component | رشته | یک کامپوننت URI که توسط encodeUriComponent() یا به روشهای دیگر کدگذاری شده است. |
مجوزهای مرتبط
هیچ کدام.
encodeUri
با حذف کاراکترهای خاص، یک شناسه منبع یکسان (URI) کدگذاری شده را برمیگرداند. رشتهای را برمیگرداند که نشان دهنده رشته ارائه شده کدگذاری شده به عنوان یک URI است.
مثال
const encodeUri = require('encodeUri');
const sendHttpGet = require('sendHttpGet');
sendHttpGet('https://www.example.com/' + encodeUri(pathInput));
نحو
encodeUri(uri);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
uri | رشته | یک URI کامل. |
مجوزهای مرتبط
هیچ کدام.
encodeUriComponent
با حذف کاراکترهای خاص، یک شناسه منبع یکسان (URI) کدگذاری شده را برمیگرداند. رشتهای را برمیگرداند که نشان دهنده رشته ارائه شده کدگذاری شده به عنوان یک URI است.
مثال
const encodeUriComponent = require('encodeUriComponent');
const sendHttpGet = require('sendHttpGet');
sendHttpGet('https://www.example.com/?' + encodeUriComponent(queryInput));
نحو
encodeUriComponent(str);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
str | رشته | یک جزء از یک URI. |
مجوزهای مرتبط
هیچ کدام.
extractEventsFromMpv1
درخواست ورودی Measurement Protocol V1 را به لیستی از رویدادها با فرمت Unified Schema تبدیل میکند. لیست رویدادهای استخراج شده را برمیگرداند. اگر درخواست در قالب صحیح نباشد، خطا میدهد.
مثال
const extractEventsFromMpv1 = require('extractEventsFromMpv1');
const isRequestMpv1 = require('isRequestMpv1');
if (isRequestMpv1()) {
const events = extractEventsFromMpv1();
for (let i = 0; i < events.length; ++i) {
const event = events[i];
// Process event.
}
}
نحو
extractEventsFromMpv1();
مجوزهای مرتبط
به مجوز read_request نیاز دارد. این مجوز باید طوری پیکربندی شود که حداقل به موارد زیر دسترسی داشته باشد:
-
body -
query parameters
extractEventsFromMpv2
درخواست ورودی Measurement Protocol V2 را به لیستی از رویدادها با فرمت Unified Schema تبدیل میکند. لیست رویدادهای استخراج شده را برمیگرداند. اگر درخواست در قالب صحیح نباشد، خطا میدهد.
مثال
const extractEventsFromMpv2 = require('extractEventsFromMpv2');
const isRequestMpv2 = require('isRequestMpv2');
if (isRequestMpv2()) {
const events = extractEventsFromMpv2();
for (let i = 0; i < events.length; ++i) {
const event = events[i];
// Process event.
}
}
نحو
extractEventsFromMpv2();
مجوزهای مرتبط
به مجوز read_request نیاز دارد. این مجوز باید طوری پیکربندی شود که حداقل به موارد زیر دسترسی داشته باشد:
-
body -
query parameters
fromBase64
یک رشته کدگذاری شده با base64 را رمزگشایی میکند. در صورت نامعتبر بودن ورودی، undefined را برمیگرداند.
نحو
fromBase64(base64EncodedString);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
base64EncodedString | رشته | رشته کدگذاری شده با Base64. |
مثال
const fromBase64 = require('fromBase64');
const greeting = fromBase64('aGVsbG8=');
if (greeting === 'hello') {
// ...
}
مجوزهای مرتبط
هیچ کدام.
generateRandom
یک عدد تصادفی (عدد صحیح) را در محدوده داده شده برمیگرداند.
مثال
const generateRandom = require('generateRandom');
const randomValue = generateRandom(0, 10000000);
نحو
generateRandom(min, max);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
min | شماره | حداقل مقدار بالقوه عدد صحیح برگشتی (شامل). |
max | شماره | حداکثر مقدار بالقوه عدد صحیح برگشتی (شامل). |
مجوزهای مرتبط
هیچ کدام.
getAllEventData
یک کپی از دادههای رویداد را برمیگرداند.
نحو
getAllEventData();
مجوزهای مرتبط
getClientName
رشتهای را برمیگرداند که حاوی نام کلاینت فعلی است.
نحو
getClientName();
مجوزهای مرتبط
getContainerVersion
یک شیء حاوی دادههای مربوط به کانتینر فعلی را برمیگرداند. شیء برگردانده شده فیلدهای زیر را خواهد داشت:
{
containerId: string,
debugMode: boolean,
environmentName: string,
environmentMode: boolean,
previewMode: boolean,
version: string,
}
مثال
const getContainerVersion = require('getContainerVersion');
const containerVersion = getContainerVersion();
const containerId = containerVersion['containerId'];
const isDebug = containerVersion['debugMode'];
نحو
getContainerVersion();
مجوزهای مرتبط
getCookieValues
آرایهای شامل مقادیر تمام کوکیها با نام داده شده را برمیگرداند.
مثال
const getCookieValues = require('getCookieValues');
const lastVisit = getCookieValues('lastVisit')[0];
if (lastVisit) {
// ...
}
نحو
getCookieValues(name[, noDecode]);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
name | رشته | نام کوکی. |
noDecode | بولی | اگر true ، مقادیر کوکی قبل از برگرداندن رمزگشایی نمیشوند. مقدار پیشفرض آن false . |
مجوزهای مرتبط
getEventData
یک کپی از مقدار موجود در مسیر داده شده در دادههای رویداد را برمیگرداند. اگر هیچ داده رویدادی وجود نداشته باشد یا اگر هیچ مقداری در مسیر داده شده وجود نداشته باشد، undefined را برمیگرداند.
مثال
const getEventData = require('getEventData');
const campaignId = getEventData('campaign.id');
const itemId = getEventData('items.0.id');
const referrer = getEventData('page_referrer');
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
keyPath | هر | مسیر کلید، که در آن اجزای مسیر با نقطه از هم جدا میشوند. اجزای مسیر میتوانند کلیدهای یک شیء یا اندیسهای یک آرایه باشند. اگر keyPath یک رشته نباشد، به اجبار به یک رشته تبدیل میشود. |
نحو
getEventData(keyPath);
مجوزهای مرتبط
getGoogleAuth
یک شیء مجوز را برمیگرداند که وقتی با sendHttpGet یا sendHttpRequest استفاده شود، شامل یک هدر مجوز برای APIهای Google Cloud خواهد بود. این API از Application Default Credentials برای یافتن خودکار اعتبارنامهها از محیط سرور استفاده میکند.
مثال
const getGoogleAuth = require('getGoogleAuth');
const logToConsole = require('logToConsole');
const sendHttpGet = require('sendHttpGet');
const auth = getGoogleAuth({
scopes: ['https://www.googleapis.com/auth/datastore']
});
sendHttpGet(
'https://firestore.googleapis.com/v1/projects/my-project/databases/(default)/documents/collection/document',
{authorization: auth}
).then((result) => {
if (result.statusCode >= 200 && result.statusCode < 300) {
logToConsole('Result: ' + result.body);
data.gtmOnSuccess();
} else {
data.gtmOnFailure();
}
});
نحو
getGoogleAuth(scopes);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
scopes | آرایه | آرایهای از محدودههای API گوگل OAuth 2.0 که درخواست دسترسی به آنها داده میشود. |
مجوزهای مرتبط
به مجوز use_google_credentials نیاز دارد. این مجوز باید با یک یا چند محدوده مجاز پیکربندی شود.
getGoogleScript
منبعی را از مجموعهای از اسکریپتهای گوگل که از پیش تعیین شدهاند بازیابی میکند و یک promise را به همراه اسکریپت و فرادادههای ذخیرهسازی مرتبط برمیگرداند.
این promise به یک شیء حاوی دو کلید تبدیل میشود: script و metadata . اگر درخواست با شکست مواجه شود، promise با یک کلید reason رد میشود.
شیء metadata بر اساس هدرهای پاسخ منبع، شامل فرادادههای ذخیرهسازی زیر خواهد بود؛ هر فیلد فقط در صورتی وجود خواهد داشت که هدر مربوطه در پاسخ منبع وجود داشته باشد.
{
'cache-control': string,
'expires': string,
'last-modified': string,
}
مثال
const getGoogleScript = require('getGoogleScript');
getGoogleScript('ANALYTICS').then((result) => {
// Operate on result.script and result.metadata here.
});
نحو
getGoogleScript(script[, options]);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
script | رشته | نام اسکریپت. اسکریپتهای پشتیبانیشده عبارتند از 'ANALYTICS' ، 'GTAG' و 'GTM' .گزینه 'ANALYTICS' اسکریپت گوگل آنالیتیکس را از https://www.google-analytics.com/analytics.js دریافت میکند.گزینه 'GTAG' اسکریپت تگ سایت سراسری (gtag.js) را از https://www.googletagmanager.com/gtag/js دریافت میکند.گزینه 'GTM' اسکریپت گوگل تگ منیجر را از https://www.googletagmanager.com/gtm.js دریافت میکند. |
options | شیء | گزینههای درخواست اختیاری. برای گزینههای پشتیبانیشده به زیر مراجعه کنید. |
گزینهها
| گزینه | نوع | توضیحات |
|---|---|---|
id | رشته | قابل اجرا برای 'GTAG' با شناسه اندازهگیری gtag و 'GTM' با شناسه کانتینر وب (مثلاً GTM-XXXX). |
debug | هر | اگر truey باشد، نسخه اشکالزدایی اسکریپت اندازهگیری را درخواست و برمیگرداند. |
timeout | شماره | زمان پایان درخواست بر حسب میلیثانیه؛ مقادیر غیرمثبت نادیده گرفته میشوند. اگر زمان درخواست به پایان برسد، تابع فراخوانی با undefined برای مقدار اسکریپت و {} برای شیء فراداده فراخوانی میشود. |
کلیدهای گزینه ناشناخته نادیده گرفته میشوند.
مجوزهای مرتبط
به مجوز send_http نیاز دارد. این مجوز باید طوری پیکربندی شود که حداقل به موارد زیر دسترسی داشته باشد:
- دامنههای گوگل را مجاز کنید
getRemoteAddress
با خواندن هدرهای درخواست مانند Forwarded و X-Forwarded-For، یک نمایش رشتهای از آدرس IP مبدا، مثلاً 12.345.67.890 برای IPv4 یا 2001:0db8:85a3:0:0:8a2e:0370:7334 برای IPv6، را برمیگرداند. توجه: این API تمام تلاش خود را برای کشف IP مبدا انجام میدهد، اما نمیتواند تضمین کند که نتیجه دقیق باشد.
نحو
getRemoteAddress();
مجوزهای مرتبط
به مجوز read_request نیاز دارد. این مجوز باید طوری پیکربندی شود که حداقل به موارد زیر دسترسی داشته باشد:
- هدرهای
ForwardedوX-Forwarded-For - آدرس IP از راه دور
getRequestBody
بدنه درخواست را در صورت وجود، به صورت رشته و در غیر این صورت undefined برمیگرداند.
نحو
getRequestBody();
مجوزهای مرتبط
getRequestHeader
مقدار هدر درخواست نامگذاری شده را در صورت وجود، به صورت رشته و در غیر این صورت undefined برمیگرداند. اگر هدر تکرار شود، مقادیر برگردانده شده با ', ' به هم متصل میشوند.
مثال
const getRequestHeader = require('getRequestHeader');
const host = getRequestHeader('host');
نحو
getRequestHeader(headerName);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
headerName | رشته | نام هدر. این مقدار به حروف کوچک و بزرگ حساس نیست. |
مجوزهای مرتبط
getRequestMethod
روش درخواست، مثلاً 'GET' یا 'POST' را به صورت رشته برمیگرداند.
مثال
const getRequestMethod = require('getRequestMethod');
if (getRequestMethod() === 'POST') {
// Handle the POST request here.
}
نحو
getRequestMethod();
مجوزهای مرتبط
هیچ کدام.
getRequestPath
مسیر درخواست را بدون رشته پرسوجو برمیگرداند. برای مثال، اگر آدرس اینترنتی '/foo?id=123' باشد، این تابع '/foo' را برمیگرداند. پیشوند آدرس اینترنتی کانتینر سرور را به طور خودکار از مسیر حذف میکند. برای مثال، اگر آدرس اینترنتی کانتینر سرور https://example.com/analytics باشد و مسیر درخواست '/analytics/foo' باشد، این تابع '/foo' را برمیگرداند.
مثال
const getRequestPath = require('getRequestPath');
const requestPath = getRequestPath();
if (requestPath === '/') {
// Handle a request for the root path.
}
نحو
getRequestPath();
مجوزهای مرتبط
getRequestQueryParameter
مقدار رمزگشایی شده پارامتر رشته پرس و جو نامگذاری شده را به صورت رشته یا در صورت عدم وجود پارامتر، undefined برمیگرداند. اگر پارامتر در رشته پرس و جو تکرار شود، اولین مقداری که در رشته پرس و جو ظاهر میشود، برگردانده میشود.
مثال
const getRequestQueryParameter = require('getRequestQueryParameter');
const query = getRequestQueryParameter('query');
if (query) {
// Process query here.
}
نحو
getRequestQueryParameter(name);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
name | رشته | نام پارامتر پرس و جو. |
مجوزهای مرتبط
getRequestQueryParameters
پارامترهای پرسوجوی درخواست HTTP ورودی را به عنوان یک شیء که نام پارامترهای پرسوجو را به مقدار یا مقادیر مربوطه نگاشت میکند، برمیگرداند. نامها و مقادیر پارامترها رمزگشایی میشوند.
مثال
const getRequestQueryParameters = require('getRequestQueryParameters');
const queryParameters = getRequestQueryParameters();
if (queryParameters['search']) {
// Handle the search query here.
const maxResults = queryParameters['max_results'];
}
نحو
getRequestQueryParameters();
مجوزهای مرتبط
getRequestQueryString
پرسوجوی درخواست را به صورت یک رشته، بدون علامت سؤال ابتدای آن، یا یک رشته خالی در صورتی که URL درخواست شامل رشته پرسوجو نباشد، برمیگرداند.
مثال
const getRequestQueryString = require('getRequestQueryString');
const queryString = getRequestQueryString();
if (queryString !== '') {
// Handle the query string.
}
نحو
getRequestQueryString();
مجوزهای مرتبط
getTimestamp
منسوخ شده. getTimestampMillis را ترجیح دهید.
عددی را برمیگرداند که زمان فعلی را بر حسب میلیثانیه از زمان آغاز یونیکس نشان میدهد، همانطور که توسط Date.now() برگردانده میشود.
نحو
getTimestamp();
مجوزهای مرتبط
هیچ کدام.
getTimestampMillis
عددی را برمیگرداند که زمان فعلی را بر حسب میلیثانیه از زمان آغاز یونیکس نشان میدهد، همانطور که توسط Date.now() برگردانده میشود.
نحو
getTimestampMillis();
مجوزهای مرتبط
هیچ کدام.
getType
رشتهای را برمیگرداند که نوع مقدار داده شده را توصیف میکند.
| نوع ورودی | مقدار برگشتی |
|---|---|
| رشته | 'string' |
| شماره | 'number' |
| بولی | 'boolean' |
| تهی | 'null' |
| تعریف نشده | 'undefined' |
| آرایه | 'array' |
| شیء | 'object' |
| عملکرد | 'function' |
مثال
const getType = require('getType');
const type = getType(value);
if (type === 'string') {
// Handle string input.
} else if (type === 'number') {
// Handle numeric input.
} else {
logToConsole('Unsupported input type: ', type);
}
نحو
getType(value);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
value | هر | مقدار ورودی. |
مجوزهای مرتبط
هیچ کدام.
hmacSha256
یک امضای رمزگذاری شده را با استفاده از کد تأیید هویت پیام مبتنی بر هش (HMAC) با SHA-256 محاسبه میکند. پیشفرضها روی رمزگذاری base64url است.
برای استفاده از این API، متغیر محیطی SGTM_CREDENTIALS را در سرور روی مسیر یک فایل کلید JSON کدگذاری شده با UTF-8 با فرمت زیر تنظیم کنید:
{
"keys": {
"key1": "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5",
"key2": "OTg3NjU0MzIxMHp5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2Jh",
...
}
}
مقادیر، کلیدهای HMAC با کدگذاری base64 هستند. متن JSON نباید با نشانگر ترتیب بایت شروع شود.
مثال
const hmacSha256 = require('hmacSha256');
const toBase64 = require('toBase64');
const header = toBase64('{"alg":"HS256","typ":"JWT"}', {urlEncoding: true});
const claim = toBase64('{"sub":"1234567890","iat":1698164946}', {urlEncoding: true});
const signature = hmacSha256(header + '.' + claim, 'key1');
const jwt = header + "." + claim + '.' + signature;
نحو
hmacSha256(data, keyId, options)
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
data | رشته | دادههای لازم برای محاسبهی مقدار HMAC. |
keyId | رشته | یک شناسه کلید از فایل کلید JSON که به کلید مورد استفاده اشاره دارد. |
options | شیء | پیکربندی اختیاری API. (به گزینههای زیر مراجعه کنید.) |
گزینهها
| گزینه | نوع | توضیحات |
|---|---|---|
outputEncoding | رشته | قالب کدگذاری برای مقدار بازگشتی را مشخص میکند. قالبهای پشتیبانیشده عبارتند از hex ، base64 یا base64url . در صورت عدم تعیین، پیشفرض base64url است. |
مجوزهای مرتبط
حداقل نسخه تصویر
isRequestMpv1
اگر درخواست ورودی یک درخواست پروتکل اندازهگیری نسخه ۱ باشد، مقدار true و در غیر این صورت false را برمیگرداند.
مثال
const isRequestMpv1 = require('isRequestMpv1');
if (isRequestMpv1()) {
// Handle Measurement Protocol V1 request.
const events = extractEventsFromMpv1();
}
نحو
isRequestMpv1();
مجوزهای مرتبط
هیچ کدام.
isRequestMpv2
اگر درخواست ورودی یک درخواست Measurement Protocol V2 باشد، true و در غیر این صورت false را برمیگرداند.
مثال
const isRequestMpv2 = require('isRequestMpv2');
if (isRequestMpv2()) {
// Handle Measurement Protocol V2 request.
const events = extractEventsFromMpv2();
}
نحو
isRequestMpv2();
مجوزهای مرتبط
هیچ کدام.
logToConsole
آرگومان(های) خود را در کنسول ثبت میکند.
این گزارشها در Logs Explorer در کنسول Google Cloud قابل مشاهده هستند. از Logs Explorer، logName =~ "stdout" را اجرا کنید تا ورودیهای گزارش ایجاد شده توسط این API را مشاهده کنید.
مثال
const logToConsole = require('logToConsole');
const that = 123;
const those = { ... };
logToConsole('that is: ', that, ' and those is: ', those);
نحو
logToConsole(argument1[, argument2, ...]);
پارامترها
این API یک یا چند آرگومان میگیرد که در صورت لزوم، هر کدام به یک رشته تبدیل شده و در کنسول ثبت میشوند.
مجوزهای مرتبط
makeInteger
مقدار داده شده را به یک عدد (عدد صحیح) تبدیل میکند.
نحو
makeInteger(value);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
value | هر نوع | مقداری که باید تبدیل شود. |
مجوزهای مرتبط
هیچ کدام.
makeNumber
مقدار داده شده را به عدد تبدیل میکند.
نحو
makeNumber(value);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
value | هر نوع | مقداری که باید تبدیل شود. |
مجوزهای مرتبط
هیچ کدام.
makeString
مقدار داده شده را به صورت یک رشته برمیگرداند.
نحو
makeString(value);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
value | هر نوع | مقداری که باید تبدیل شود. |
مجوزهای مرتبط
هیچ کدام.
makeTableMap
یک شیء جدول ساده با دو ستون را به یک Map تبدیل میکند. این برای تغییر یک فیلد قالب SIMPLE_TABLE با دو ستون به قالبی قابل مدیریتتر استفاده میشود.
برای مثال، این تابع میتواند یک شیء جدول را تبدیل کند:
[
{'key': 'k1', 'value': 'v1'},
{'key': 'k2', 'value': 'v2'}
]
به یک نقشه:
{
'k1': 'v1',
'k2': 'v2'
}
یک شیء را برمیگرداند: Map تبدیلشده از جفتهای کلید-مقدار به آن اضافه شده است، یا در غیر این صورت null .
نحو
makeTableMap(tableObj, keyColumnName, valueColumnName);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
tableObj | فهرست | شیء جدول برای تبدیل. این فهرستی از نقشهها است که در آن هر Map نشان دهنده یک ردیف در جدول است. نام هر ویژگی در یک شیء ردیف، نام ستون است و مقدار ویژگی، مقدار ستون در ردیف است. |
keyColumnName | رشته | نام ستونی که مقادیر آن در Map تبدیلشده به کلید تبدیل خواهند شد. |
valueColumnName | رشته | نام ستونی که مقادیر آن به مقادیر موجود در Map تبدیل شده تبدیل خواهند شد. |
مجوزهای مرتبط
هیچ کدام.
parseUrl
شیءای را برمیگرداند که شامل تمام اجزای یک URL مشخص است، مشابه شیء URL .
این API برای هر URL ناقص، undefined برمیگرداند. برای URLهای با فرمت صحیح، فیلدهایی که در رشته URL وجود ندارند، مقدار یک رشته خالی یا در مورد searchParams ، یک شیء خالی خواهند داشت.
شیء برگشتی فیلدهای زیر را خواهد داشت:
{
href: string,
origin: string,
protocol: string,
username: string,
password: string,
host: string,
hostname: string,
port: string,
pathname: string,
search: string,
searchParams: Object<string, (string|Array)>,
hash: string,
}
مثال
const parseUrl = require('parseUrl');
const urlObject = parseUrl('https://abc:xyz@example.com:8080/foo?param=val%2Cue#bar');
نحو
parseUrl(url);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
url | رشته | آدرس اینترنتی کاملی که تجزیه و تحلیل خواهد شد. |
مجوزهای مرتبط
هیچ کدام.
returnResponse
پاسخی را که قبلاً توسط قالبهای دیگر با استفاده از APIهایی که پاسخ را تغییر میدهند، از جمله setCookie ، setPixelResponse ، setResponseBody ، setResponseHeader و setResponseStatus، تنظیم شده بود، پاک میکند. پیشفرضها روی کد وضعیت HTTP 200، بدنه خالی و بدون هدر هستند.
توصیه میشود که این API از یک الگوی کلاینت استفاده شود.
نحو
returnResponse();
مثال
به مثال runContainer مراجعه کنید.
مجوزهای مرتبط
runContainer
منطق کانتینر (متغیرها، تریگرها، تگها) را در محدوده یک رویداد اجرا میکند. اگر این API در حین اجرای کانتینر فراخوانی شود، کانتینر دوباره اجرا میشود.
توابع فراخوانی onComplete و onStart تابعی به نام bindToEvent دریافت میکنند. bindToEvent برای اجرای یک API در متن رویداد استفاده کنید. برای جزئیات بیشتر به مثال addEventCallback مراجعه کنید.
توصیه میشود که این API از یک الگوی کلاینت استفاده شود.
const returnResponse = require('returnResponse');
const runContainer = require('runContainer');
// Runs the container with a simple pageview event and then returns a response.
runContainer({'event_name': 'pageview'}, () => returnResponse());
نحو
runContainer(event, onComplete, onStart);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
event | شیء | پارامترهای رویداد. |
onComplete | تابع | یک تابع فراخوانی که پس از اتمام اجرای تمام تگها فراخوانی میشود. |
onStart | تابع | یک تابع فراخوانی که بلافاصله، قبل از شروع به کار تگها، فراخوانی میشود. |
مجوزهای مرتبط
sendEventToGoogleAnalytics
یک رویداد واحد را با استفاده از دادههای رویداد مشترک به گوگل آنالیتیکس ارسال میکند و یک promise را برمیگرداند که به یک شیء با کلید location ختم میشود یا به یک شیء با کلید reason رد میشود. مقصد، گوگل آنالیتیکس ۴، بر اساس شناسه اندازهگیری در دادههای رویداد است.
فیلد location ، در صورت وجود، روی هدر location تنظیم میشود.
مثال
const logToConsole = require('logToConsole');
const sendEventToGoogleAnalytics = require('sendEventToGoogleAnalytics');
const setResponseHeader = require('setResponseHeader');
const setResponseStatus = require('setResponseStatus');
// Sends an event to Google Analytics and returns failure if the request did not
// succeed. Additionally, if the request resulted in a redirect request, the
// code nominates a redirect response to be returned.
sendEventToGoogleAnalytics(event).then((response) => {
if (response.location) {
setResponseHeader('location', response.location);
setResponseStatus(302);
} else {
setResponseStatus(200);
}
data.gtmOnSuccess();
}).catch((error) => {
logToConsole(error.reason);
setResponseStatus(500);
data.gtmOnFailure();
});
نحو
sendEventToGoogleAnalytics(event);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
event | شیء | این رویداد در قالب طرحواره یکپارچه (Unified Schema) است. |
مجوزهای مرتبط
به مجوز send_http نیاز دارد. این مجوز باید طوری پیکربندی شود که حداقل به موارد زیر دسترسی داشته باشد:
- دامنههای گوگل را مجاز کنید
sendHttpGet
یک درخواست HTTP GET به URL مشخص شده ارسال میکند و promise ای را برمیگرداند که پس از تکمیل یا اتمام زمان درخواست، با نتیجه مطابقت دارد.
نتیجهی حلشده، یک شیء شامل سه کلید است: statusCode ، headers و body . اگر درخواست ناموفق باشد (مثلاً URL نامعتبر، عدم وجود مسیر به میزبان، شکست مذاکره SSL و غیره)، promise با دستور زیر رد میشود: {reason: 'failed'} . اگر گزینهی timeout تنظیم شده باشد و درخواست به پایان رسیده باشد، promise با دستور زیر رد میشود: {reason: 'timed_out'}
مثال
const sendHttpGet = require('sendHttpGet');
// Returns the response body as the value for a variable.
return sendHttpGet('https://example.com/item/' + data.itemId, {
headers: {key: 'value'},
timeout: 500,
}).then((result) => result.body, () => undefined);
نحو
sendHttpGet(url[, options]);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
url | رشته | آدرس اینترنتی (URL) درخواستی. |
options | شیء | گزینههای درخواست اختیاری . (به گزینههای زیر مراجعه کنید.) |
گزینهها
| گزینه | نوع | توضیحات |
|---|---|---|
headers | رشته | سربرگهای درخواست اضافی. |
timeout | شماره | مدت زمان انتظار، بر حسب میلیثانیه، قبل از لغو درخواست. مقدار پیشفرض 15000 است. |
authorization | شیء | شیء مجوز اختیاری از فراخوانی getGoogleAuth برای گنجاندن هدرهای مجوز هنگام ارسال درخواست به googleapis.com . |
مجوزهای مرتبط
sendHttpRequest
یک درخواست HTTP به URL مشخص شده ارسال میکند و promise ای را برمیگرداند که پس از تکمیل درخواست یا اتمام مهلت زمانی، با پاسخ برطرف میشود.
نتیجهی حلشده، یک شیء شامل سه کلید است: statusCode ، headers و body . اگر درخواست ناموفق باشد (مثلاً URL نامعتبر، عدم وجود مسیر به میزبان، شکست مذاکره SSL و غیره)، promise با دستور زیر رد میشود: {reason: 'failed'} . اگر گزینهی timeout تنظیم شده باشد و درخواست به پایان رسیده باشد، promise با دستور زیر رد میشود: {reason: 'timed_out'}
مثال
const sendHttpRequest = require('sendHttpRequest');
const setResponseBody = require('setResponseBody');
const setResponseHeader = require('setResponseHeader');
const setResponseStatus = require('setResponseStatus');
const postBody = 'interaction=click&campaign=promotion&medium=email';
// Sends a POST request and nominates response based on the response to the POST
// request.
sendHttpRequest('https://example.com/collect', {
headers: {key: 'value'},
method: 'POST',
timeout: 500,
}, postBody).then((result) => {
setResponseStatus(result.statusCode);
setResponseBody(result.body);
setResponseHeader('cache-control', result.headers['cache-control']);
});
نحو
sendHttpRequest(url[, options[, body]]);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
url | رشته | آدرس اینترنتی (URL) درخواستی. |
options | شیء | گزینههای درخواست اختیاری . (به گزینههای زیر مراجعه کنید.) |
body | رشته | متن درخواست اختیاری . |
گزینهها
| گزینه | نوع | توضیحات |
|---|---|---|
headers | رشته | سربرگهای درخواست اضافی. |
method | شیء | روش درخواست. پیشفرض GET است. |
timeout | شماره | مدت زمان انتظار، بر حسب میلیثانیه، قبل از لغو درخواست. مقدار پیشفرض 15000 است. |
authorization | شیء | شیء مجوز اختیاری از فراخوانی getGoogleAuth برای گنجاندن هدرهای مجوز هنگام ارسال درخواست به googleapis.com . |
مجوزهای مرتبط
sendPixelFromBrowser
دستوری را به مرورگر ارسال میکند تا URL ارائه شده را به عنوان یک تگ <img> بارگذاری کند. این پروتکل دستوری در تگهای وب Google Tag for GA4 و Google Analytics: GA Event پشتیبانی میشود. شما باید URL کانتینر سرور را پیکربندی کنید. برای جزئیات بیشتر به دستورالعملها مراجعه کنید.
اگر درخواست ورودی از پروتکل فرمان پشتیبانی نکند، یا اگر پاسخ قبلاً پاک شده باشد، این API false برمیگرداند. در غیر این صورت، این API true را برمیگرداند.
مثال:
const sendPixelFromBrowser = require('sendPixelFromBrowser');
sendPixelFromBrowser('https://example.com/?id=123');
نحو
sendPixelFromBrowser(url)
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
url | رشته | آدرس اینترنتی (url) که باید به مرورگر ارسال شود. |
مجوزهای مرتبط
setCookie
یک کوکی را با گزینههای مشخص شده تنظیم یا حذف میکند.
برای حذف یک کوکی، باید یک کوکی با همان مسیر و دامنهای که کوکی با آن ایجاد شده است، تنظیم کرد و یک مقدار انقضا که در گذشته است به آن اختصاص داد، مثلاً "Thu, 01 Jan 1970 00:00:00 GMT" .
توجه داشته باشید که برای ارسال پاسخ به کلاینت، باید returnResponse فراخوانی شود.
مثال
const setCookie = require('setCookie');
// Sets an httpOnly cookie with a max-age of 3600.
setCookie('cookieName', 'cookieValue', {'max-age': 3600, httpOnly: true});
نحو
setCookie(name, value[, options[, noEncode]]);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
name | رشته | نام کوکی. این نام به حروف کوچک و بزرگ حساس نیست. |
value | رشته | مقدار کوکی. |
options | شیء | ویژگیهای اختیاری کوکی: domain ، expires ، fallbackDomain ، httpOnly ، max-age ، path ، secure و sameSite . (به Options در زیر مراجعه کنید.) |
noEncode | بولی | اگر مقدار آن درست باشد، مقدار کوکی کدگذاری نخواهد شد. مقدار پیشفرض آن false است. |
دامنه: میزبان (host) که کوکی به آن ارسال خواهد شد. اگر روی مقدار ویژه 'auto' تنظیم شود، میزبان به طور خودکار با استفاده از استراتژی زیر محاسبه میشود:
- eTLD+1 مربوط به سربرگ
Forwarded، در صورت وجود. - eTLD+1 مربوط به هدر
X-Forwarded-Host، در صورت وجود. - eTLD+1 مربوط به هدر
Host.
- eTLD+1 مربوط به سربرگ
expires : حداکثر طول عمر کوکی. این باید یک رشته تاریخ با فرمت UTC باشد، مثلاً "Sat, 26 Oct 1985 08:21:00 GMT". اگر هر دو
expiresوmax-ageتنظیم شده باشند،max-ageاولویت دارد.httpOnly : اگر
trueجاوا اسکریپت را از دسترسی به کوکی منع میکند.max-age : تعداد ثانیهها تا زمان انقضای کوکی. عدد صفر یا منفی، کوکی را فوراً منقضی میکند. اگر هم
expiresو همmax-ageتنظیم شده باشند،max-ageاولویت دارد.مسیر : مسیری که باید در URL درخواستی وجود داشته باشد، در غیر این صورت مرورگر هدر کوکی را ارسال نخواهد کرد.
امن : اگر روی
trueتنظیم شود، کوکی فقط زمانی به سرور ارسال میشود که درخواستی از یک نقطه پایانیhttps:ارسال شود.sameSite : تأیید میکند که کوکی نباید با درخواستهای بین مبدا ارسال شود. باید
'strict'،'lax'یا'none'باشد.
مجوزهای مرتبط
setPixelResponse
متن پاسخ را روی یک GIF 1x1 تنظیم میکند، هدر Content-Type را روی 'image/gif' تنظیم میکند، هدرهای ذخیرهسازی را طوری تنظیم میکند که مرورگرها پاسخ را ذخیره نکنند و وضعیت پاسخ را روی 200 تنظیم میکند.
توجه داشته باشید که برای ارسال پاسخ به کلاینت، باید returnResponse فراخوانی شود.
نحو
setPixelResponse();
مجوزهای مرتبط
به مجوز access_response نیاز دارد. این مجوز باید طوری پیکربندی شود که حداقل به موارد زیر دسترسی داشته باشد:
-
headers- باید کلیدهای زیر را مجاز بدانند-
content-type -
cache-control -
expires -
pragma
-
-
body -
status
setResponseBody
بدنه پاسخ را روی آرگومان تنظیم میکند.
توجه داشته باشید که برای ارسال پاسخ به کلاینت، باید returnResponse فراخوانی شود.
نحو
setResponseBody(body[, encoding]);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
body | رشته | مقداری که به عنوان بدنه پاسخ تنظیم میشود. |
encoding | رشته | کدگذاری کاراکتر بدنه پاسخ (پیشفرض روی 'utf8' ). مقادیر پشتیبانیشده شامل 'ascii' ، 'utf8' ، 'utf16le' ، 'ucs2' ، 'base64' ، 'latin1' ، 'binary' و 'hex' هستند. |
مجوزهای مرتبط
به مجوز access_response نیاز دارد. این مجوز باید طوری پیکربندی شود که حداقل به موارد زیر دسترسی داشته باشد:
-
body
setResponseHeader
یک هدر در پاسخی که برگردانده خواهد شد تنظیم میکند. اگر هدری با این نام (غیرحساس به حروف بزرگ و کوچک) قبلاً توسط این API تنظیم شده باشد، فراخوانی اخیر مقدار تنظیم شده توسط فراخوانی کننده قبلی را بازنویسی یا پاک میکند.
توجه داشته باشید که برای ارسال پاسخ به کلاینت، باید returnResponse فراخوانی شود.
نحو
setResponseHeader(name, value);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
name | رشته | نام هدر. نامهای هدر HTTP به حروف کوچک و بزرگ حساس نیستند، بنابراین نام هدر با حروف کوچک نوشته خواهد شد. |
value | رشته تعریف نشده | مقدار هدر. اگر null یا undefined باشد، هدر نامگذاری شده را از پاسخی که برگردانده خواهد شد پاک میکند. |
مجوزهای مرتبط
به مجوز access_response نیاز دارد. این مجوز باید طوری پیکربندی شود که حداقل به موارد زیر دسترسی داشته باشد:
-
headers
setResponseStatus
کد وضعیت HTTP پاسخی که برگردانده خواهد شد را تنظیم میکند.
توجه داشته باشید که برای ارسال پاسخ به کلاینت، باید returnResponse فراخوانی شود.
نحو
setResponseStatus(statusCode);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
statusCode | شماره | کد وضعیت HTTP که باید برگردانده شود. |
مجوزهای مرتبط
به مجوز access_response نیاز دارد. این مجوز باید طوری پیکربندی شود که حداقل به موارد زیر دسترسی داشته باشد:
-
status
sha256
خلاصه SHA-256 ورودی را محاسبه میکند و یک فراخوانی برگشتی با خلاصه کدگذاری شده در base64 فراخوانی میکند، مگر اینکه شیء options کدگذاری خروجی متفاوتی را مشخص کند.
این امضا و رفتار API با API sha256 برای کانتینرهای وب مطابقت دارد؛ با این حال، قالبهای سفارشی در کانتینرهای سرور باید برای کد سادهتر از API sha256Sync استفاده کنند.
مثال
const encodeUriComponent = require('encodeUriComponent');
const sendHttpGet = require('sendHttpGet');
const sha256 = require('sha256');
sha256('inputString', (digest) => {
sendHttpGet('https://example.com/collect?id=' + encodeUriComponent(digest));
});
sha256('inputString', (digest) => {
sendHttpGet('https://example.com/collect?id=' + encodeUriComponent(digest));
}, {outputEncoding: 'hex'});
نحو
sha256(input, onSuccess, options = undefined);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
input | رشته | رشتهای که قرار است هش شود. |
onSuccess | تابع | با خلاصهی حاصل که با base64 کدگذاری شده است، فراخوانی میشود، مگر اینکه شیء options کدگذاری خروجی متفاوتی را مشخص کند. |
options | شیء | گزینههای اختیاری شیء برای مشخص کردن کدگذاری خروجی. در صورت مشخص شدن، شیء باید حاوی کلید outputEncoding با مقدار یکی از base64 یا hex باشد. |
مجوزهای مرتبط
هیچ کدام.
sha256Sync
خلاصه SHA-256 ورودی را که با base64 کدگذاری شده است، محاسبه و برمیگرداند، مگر اینکه شیء options کدگذاری خروجی متفاوتی را مشخص کند.
مثال
const encodeUriComponent = require('encodeUriComponent');
const sendHttpGet = require('sendHttpGet');
const sha256Sync = require('sha256Sync');
const digestBase64 = sha256Sync('inputString');
const digestHex = sha256Sync('inputString', {outputEncoding: 'hex'});
sendHttpGet('https://example.com/collect?id=' + encodeUriComponent(digestBase64));
sendHttpGet('https://example.com/collect?id=' + encodeUriComponent(digestHex));
نحو
sha256Sync(input, options = undefined);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
input | رشته | رشتهای که قرار است هش شود. |
options | شیء | گزینههای اختیاری شیء برای مشخص کردن کدگذاری خروجی. در صورت مشخص شدن، شیء باید حاوی کلید outputEncoding با مقدار یکی از base64 یا hex باشد. |
مجوزهای مرتبط
هیچ کدام.
templateDataStorage
یک شیء با متدهایی برای دسترسی به محل ذخیرهسازی دادههای الگو برمیگرداند. محل ذخیرهسازی دادههای الگو امکان اشتراکگذاری دادهها را در طول اجرای یک الگوی واحد فراهم میکند. دادههای ذخیرهشده در محل ذخیرهسازی دادههای الگو در سروری که کانتینر را اجرا میکند، باقی میمانند. در بیشتر موارد، چندین سرور وجود دارند که کانتینر را اجرا میکنند، بنابراین ذخیره دادهها در محل ذخیرهسازی دادههای الگو تضمین نمیکند که هر درخواست بعدی به دادهها دسترسی داشته باشد.
عبارت «data» در نام «templateDataStorage» به این واقعیت اشاره دارد که فقط انواع دادههای ساده و غیرتابعی میتوانند با استفاده از این API ذخیره شوند. هرگونه تابع یا ارجاع به توابع ارسالی به API، به جای آن به صورت null ذخیره خواهد شد.
نحو
const templateDataStorage = require('templateDataStorage');
// Returns a copy of the value stored for the given key, or null if nothing
// is stored with that key.
templateDataStorage.getItemCopy(key);
// Stores a copy of the value for the given key (or removes the data stored
// for the given key if the input value is null).
templateDataStorage.setItemCopy(key, value);
// Removes the value stored for the given key, if present.
templateDataStorage.removeItem(key);
// Deletes all values stored for the current template.
templateDataStorage.clear();
مثال
const sendHttpGet = require('sendHttpGet');
const setResponseBody = require('setResponseBody');
const setResponseStatus = require('setResponseStatus');
const templateDataStorage = require('templateDataStorage');
// Check to see if the item is in the cache.
const cachedBody = templateDataStorage.getItemCopy(data.key);
if (cachedBody) {
setResponseBody(cachedBody);
data.gtmOnSuccess();
return;
}
sendHttpGet(data.url).then((result) => {
if (result.statusCode >= 200 && result.statusCode < 300) {
setResponseBody(result.body);
templateDataStorage.setItemCopy(data.key, result.body);
data.gtmOnSuccess();
} else {
data.gtmOnFailure();
}
setResponseStatus(result.statusCode);
});
مجوزهای مرتبط
testRegex
یک رشته را در برابر یک عبارت منظم ایجاد شده از طریق API createRegex آزمایش میکند. در صورت مطابقت عبارت منظم، مقدار true و در غیر این صورت false را برمیگرداند.
یک عبارت منظم (regex) که با پرچم سراسری (global flag) ایجاد شده باشد، دارای وضعیت (stateful) است. برای جزئیات بیشتر به مستندات RegExp مراجعه کنید.
مثال
const createRegex = require('createRegex');
const testRegex = require('testRegex');
const domainRegex = createRegex('\\w+\\.com', 'i');
// createRegex returns null if the regex is invalid or Re2 is not available.
if (domainRegex === null) return;
// Returns true
testRegex(domainRegex, 'example.com/foobar');
نحو
testRegex(regex, string);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
regex | شیء | عبارت منظمی که باید با آن تست انجام شود، از API مربوط به createRegex برگردانده شده است. |
string | رشته | رشته آزمایشی برای آزمایش. |
مجوزهای مرتبط
هیچ کدام.
toBase64
یک رشته را به صورت base64 یا base64url کدگذاری میکند. پیشفرض روی کدگذاری base64 است.
نحو
toBase64(input, options);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
input | رشته | رشته برای رمزگذاری. |
options | شیء | پیکربندی اختیاری API. (به گزینههای زیر مراجعه کنید.) |
گزینهها
| گزینه | نوع | توضیحات | حداقل نسخه |
|---|---|---|---|
urlEncoding | بولی | اگر مقدار آن درست باشد، نتیجه با استفاده از فرمت base64url کدگذاری خواهد شد. | ۱.۰.۰ |
مثال
const toBase64 = require('toBase64');
const base64Hello = toBase64('hello');
const base64UrlHello = toBase64('hello', {urlEncoding: true});
مجوزهای مرتبط
هیچ کدام.
BigQuery
یک شیء را برمیگرداند که توابع BigQuery را ارائه میدهد.
تابع BigQuery.insert امکان نوشتن دادهها در جدول BigQuery را فراهم میکند. این تابع یک promise را برمیگرداند که در صورت درج موفقیتآمیز، اجرا میشود یا در صورت بروز خطا، اجرا را رد میکند.
وقتی درج با موفقیت انجام شود، promise بدون هیچ آرگومانی اجرا میشود.
وقتی درج با شکست مواجه میشود، promise با فهرستی از اشیاء حاوی دلیل خطا و احتمالاً یک شیء ردیف در صورت بروز خطا، رد میشود. این امکان وجود دارد که بخشی از درخواست با موفقیت انجام شود، در حالی که بخشهای دیگر با موفقیت انجام نشوند. در این حالت، promise با فهرستی از خطاها برای هر ردیف به همراه یک شیء ردیف رد میشود تا به تشخیص ردیفهای درج شده کمک کند ( به مثالهای خطا در زیر مراجعه کنید). برای اطلاعات بیشتر به مستندات BigQuery در مورد پیامهای خطا مراجعه کنید.
نحو
BigQuery.insert(connectionInfo, rows[, options]);
| پارامتر | نوع | توضیحات |
|---|---|---|
connectionInfo | شیء | اطلاعات مورد نیاز برای اتصال به جدول BigQuery را تعریف میکند. یک پارامتر اختیاری و دو پارامتر اجباری وجود دارد:
|
rows | آرایه | ردیفهایی که باید در جدول درج شوند. |
options | شیء | گزینههای درخواست اختیاری. گزینههای پشتیبانیشده عبارتند از: ignoreUnknownValues و skipInvalidRows . کلیدهای گزینه ناشناخته نادیده گرفته میشوند. (به Options در زیر مراجعه کنید.) |
| پارامتر | نوع | توضیحات |
|---|---|---|
ignoreUnknownValues | بولی | اگر روی true تنظیم شود، ردیفهایی را میپذیرد که حاوی مقادیری هستند که با طرحواره مطابقت ندارند. مقادیر ناشناخته نادیده گرفته میشوند. پیشفرض روی false است. |
skipInvalidRows | بولی | اگر روی true تنظیم شود، تمام ردیفهای معتبر یک درخواست را وارد میکند، حتی اگر ردیفهای نامعتبر وجود داشته باشند. پیشفرض روی false است. |
خطای «ماژول پیدا نشد» به این معنی است که احتمالاً کانتینر سرور شما نسخه قدیمیتری از ایمیج ما را اجرا میکند که هنوز ماژول BigQuery را شامل نشده است. لطفاً کانتینر سرور خود را با همان تنظیمات و با استفاده از اسکریپت استقرار ما، مجدداً مستقر کنید. ماژول پس از اتمام عملیات به طور خودکار گنجانده خواهد شد.
یک خطای غیر درج معمولاً یک شیء خطا با یک کلید reason دارد:
[{reason: 'invalid'}]
یک خطای درج میتواند شامل چندین شیء خطا به همراه یک آرایه errors و یک شیء row باشد. در زیر مثالی از پاسخ خطا از درج دو ردیف که فقط یک ردیف دارای خطا است، آمده است:
[
{
"errors": [
{
"reason":"invalid"
}
],
"row": {
"string_col":"otherString",
"number_col":-3,
"bool_col":3
}
},
{
"errors": [
{
"reason":"stopped"
}
],
"row": {
"string_col":"stringValue",
"number_col":5,
"bool_col:false
}
}
]
مثال
const BigQuery = require('BigQuery');
const connectionInfo = {
'projectId': 'gcp-cloud-project-id',
'datasetId': 'destination-dataset',
'tableId': 'destination-table',
};
const rows = [{
'column1': 'String1',
'column2': 1234,
}];
const options = {
'ignoreUnknownValues': true,
'skipInvalidRows': false,
};
BigQuery.insert(connectionInfo, rows, options)
.then(data.gtmOnSuccess, data.gtmOnFailure);
مجوزهای مرتبط
Firestore
یک شیء را برمیگرداند که توابع Firestore را ارائه میدهد.
این API فقط از Firestore در حالت Native پشتیبانی میکند، نه Firestore در حالت Datastore . همچنین، این API فقط از استفاده از پایگاه داده پیشفرض پشتیبانی میکند.
Firestore.read
تابع Firestore.read دادهها را از یک سند Firestore میخواند و یک promise را برمیگرداند که به یک شیء حاوی دو کلید تبدیل میشود: id و data . اگر سند وجود نداشته باشد، promise با یک شیء حاوی کلید reason برابر با not_found رد میشود.
نحو
Firestore.read(path[, options]);
| پارامتر | نوع | توضیحات |
|---|---|---|
path | رشته | مسیر سند یا مجموعه. نباید با '/' شروع یا پایان یابد. |
options | شیء | گزینههای درخواست اختیاری . گزینههای پشتیبانیشده عبارتند از: projectId ، disableCache و transaction . کلیدهای گزینه ناشناخته نادیده گرفته میشوند. (به بخش Options در زیر مراجعه کنید.) |
| پارامتر | نوع | توضیحات |
|---|---|---|
projectId | رشته | اختیاری . شناسه پروژه پلتفرم ابری گوگل. در صورت حذف، projectId از متغیر محیطی GOOGLE_CLOUD_PROJECT بازیابی میشود، مادامی که تنظیمات مجوز access_firestore برای شناسه پروژه روی * یا GOOGLE_CLOUD_PROJECT تنظیم شده باشد. اگر کانتینر سرور روی Google Cloud در حال اجرا باشد، GOOGLE_CLOUD_PROJECT از قبل روی شناسه پروژه Google Cloud تنظیم خواهد شد. |
disableCache | بولی | اختیاری . تعیین میکند که آیا کش غیرفعال شود یا خیر. کش کردن به طور پیشفرض فعال است که نتایج را برای مدت زمان درخواست کش میکند. |
transaction | رشته | اختیاری . مقداری که از Firestore.runTransaction() بازیابی میشود. عملیاتی را که قرار است در یک تراکنش استفاده شود، علامتگذاری میکند. |
مثال
const Firestore = require('Firestore');
return Firestore.read('collection/document', {
projectId: 'gcp-cloud-project-id',
}).then((result) => result.data.key, () => undefined);
Firestore.write
تابع Firestore.write دادهها را در یک سند یا مجموعه Firestore مینویسد. اگر مسیر به یک مجموعه باشد، یک سند با یک شناسه تصادفی ایجاد میشود. اگر مسیر به یک سند باشد و وجود نداشته باشد، ایجاد میشود. این API یک promise را برمیگرداند که به شناسه سند اضافه شده یا تغییر یافته تبدیل میشود. اگر از گزینه تراکنش استفاده شود، API همچنان یک promise را برمیگرداند، اما حاوی شناسه نخواهد بود زیرا نوشتنها دستهای هستند.
نحو
Firestore.write(path, input[, options]);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
path | رشته | مسیر سند یا مجموعه. نباید با '/' شروع یا پایان یابد. |
input | شیء | مقداری که قرار است در سند نوشته شود. اگر گزینه ادغام تنظیم شده باشد، API کلیدهای ورودی را در سند ادغام میکند. |
options | شیء | گزینههای درخواست اختیاری . گزینههای پشتیبانیشده عبارتند از: projectId ، merge و transaction . کلیدهای گزینه ناشناخته نادیده گرفته میشوند. (به بخش Options در زیر مراجعه کنید.) |
| پارامتر | نوع | توضیحات |
|---|---|---|
projectId | رشته | اختیاری . شناسه پروژه پلتفرم ابری گوگل. در صورت حذف، projectId از متغیر محیطی GOOGLE_CLOUD_PROJECT بازیابی میشود، مادامی که تنظیمات مجوز access_firestore برای شناسه پروژه روی * یا GOOGLE_CLOUD_PROJECT تنظیم شده باشد. اگر کانتینر سرور روی Google Cloud در حال اجرا باشد، GOOGLE_CLOUD_PROJECT از قبل روی شناسه پروژه Google Cloud تنظیم خواهد شد. |
merge | بولی | اختیاری است . اگر روی true تنظیم شود، کلیدهای ورودی را در سند ادغام میکند، در غیر این صورت متد کل سند را بازنویسی میکند. مقدار پیشفرض false است. |
transaction | رشته | اختیاری . مقداری که از Firestore.runTransaction() بازیابی میشود. عملیاتی را که قرار است در یک تراکنش استفاده شود، علامتگذاری میکند. |
مثال
const Firestore = require('Firestore');
const input = {key1: 'value1', key2: 12345};
Firestore.write('collection/document', input, {
projectId: 'gcp-cloud-project-id',
merge: true,
}).then((id) => {
data.gtmOnSuccess();
}, data.gtmOnFailure);
Firestore.query
تابع Firestore.query مجموعه داده شده را جستجو میکند و یک promise را برمیگرداند که به آرایهای از اسناد Firestore که با شرایط جستجو مطابقت دارند، تبدیل میشود. شیء سند Firestore همان چیزی است که در بالا در Firestore.read ذکر شده است. اگر هیچ سندی وجود نداشته باشد که با شرایط جستجو مطابقت داشته باشد، promise برگردانده شده به یک آرایه خالی تبدیل میشود.
نحو
Firestore.query(collection, queryConditions[, options]);
| پارامتر | نوع | توضیحات |
|---|---|---|
collection | رشته | مسیر مجموعه. نباید با '/' شروع یا پایان یابد. |
queryConditions | آرایه | آرایهای از شرایط پرسوجو. هر پرسوجو به شکل آرایهای با سه مقدار ارائه میشود: key ، operator و expectedValue . مثال: [['id', '<', '5'], ['state', '==', 'CA']]. برای ایجاد نتیجه پرس و جو، شرایط با هم AND میشوند. لطفاً برای مشاهده فهرستی از عملگرهای پرس و جوی سازگار، به عملگرهای پرس و جوی Firestore مراجعه کنید. |
options | شیء | گزینههای درخواست اختیاری . گزینههای پشتیبانیشده عبارتند از: projectId ، disableCache ، limit و transaction . کلیدهای گزینه ناشناخته نادیده گرفته میشوند. (به بخش Options در زیر مراجعه کنید.) |
| پارامتر | نوع | توضیحات |
|---|---|---|
projectId | رشته | اختیاری . شناسه پروژه پلتفرم ابری گوگل. در صورت حذف، projectId از متغیر محیطی GOOGLE_CLOUD_PROJECT بازیابی میشود، مادامی که تنظیمات مجوز access_firestore برای شناسه پروژه روی * یا GOOGLE_CLOUD_PROJECT تنظیم شده باشد. اگر کانتینر سرور روی Google Cloud در حال اجرا باشد، GOOGLE_CLOUD_PROJECT از قبل روی شناسه پروژه Google Cloud تنظیم خواهد شد. |
disableCache | بولی | اختیاری . تعیین میکند که آیا کش غیرفعال شود یا خیر. کش کردن به طور پیشفرض فعال است که نتایج را برای مدت زمان درخواست کش میکند. |
limit | شماره | اختیاری . حداکثر تعداد نتایج برگردانده شده توسط پرس و جو را تغییر میدهد، مقدار پیشفرض ۵ است. |
transaction | رشته | اختیاری . مقداری که از Firestore.runTransaction() بازیابی میشود. عملیاتی را که قرار است در یک تراکنش استفاده شود، علامتگذاری میکند. |
مثال
const Firestore = require('Firestore');
const queries = const queries = [['id', '==', '5']];
return Firestore.query('collection', queries, {
projectId: 'gcp-cloud-project-id',
limit: 1,
}).then((documents) => documents[0].data.key, () => undefined);
Firestore.runTransaction
تابع Firestore.runTransaction به کاربر اجازه میدهد تا به صورت خودکار از Firestore بخواند و بنویسد. اگر یک نوشتن همزمان یا تداخل تراکنش دیگری رخ دهد، تراکنش تا دو بار دوباره امتحان میشود. اگر پس از سه تلاش کامل شکست بخورد، API با یک خطا رد میشود. این API یک promise را برمیگرداند که در صورت موفقیتآمیز بودن تراکنش، برای هر عملیات نوشتن، به آرایهای از شناسههای سند تبدیل میشود و در صورت شکست، با خطا رد میشود.
نحو
Firestore.runTransaction(callback[, options]);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
callback | تابع | یک تابع فراخوانی که با یک شناسه تراکنش رشتهای فراخوانی میشود. شناسه تراکنش را میتوان به فراخوانیهای API خواندن/نوشتن/پرسوجو ارسال کرد. این تابع فراخوانی باید یک promise را برگرداند. فراخوانی ممکن است تا سه بار قبل از شکست اجرا شود. |
options | شیء | Optional request options. The supported only supported option is projectId . Unknown option keys are ignored. (See Options , below.) |
| پارامتر | نوع | توضیحات |
|---|---|---|
projectId | رشته | Optional . Google Cloud Platform project ID. If omitted, the projectId is retrieved from the environment variable GOOGLE_CLOUD_PROJECT as long as the access_firestore permission setting for the project ID is set to * or GOOGLE_CLOUD_PROJECT . If the server container is running on Google Cloud, GOOGLE_CLOUD_PROJECT will already be set to the Google Cloud project's ID. |
مثال
const Firestore = require('Firestore');
const path = 'collection/document';
const projectId = 'gcp-cloud-project-id';
Firestore.runTransaction((transaction) => {
const transactionOptions = {
projectId: projectId,
transaction: transaction,
};
// Must return a promise.
return Firestore.read(path, transactionOptions).then((result) => {
const newInputCount = result.data.inputCount + 1;
const input = {key1: 'value1', inputCount: newInputCount};
return Firestore.write(path, input, transactionOptions);
});
}, {
projectId: projectId
}).then((ids) => {
data.gtmOnSuccess();
}, data.gtmOnFailure);
Errors are available in each Firestore function will be rejected with an object containing a reason key:
Firestore.read(...).then(onSuccess, (error) => {
if (error.reason === 'unknown') {
// Handle the unknown error here.
}
});
The error reasons can contain but are not limited to Firestore REST API Error Codes .
Associated permissions
JSON
Returns an object that provides JSON functions.
The parse() function parses a JSON string to construct the value or object described by the string. If the value cannot be parsed (eg malformed JSON), the function will return undefined . If the input value is not a string, the input will be coerced to a string.
The stringify() function converts the input into a JSON string. If the value cannot be parsed (eg the object has a cycle), the method will return undefined .
مثال
const JSON = require('JSON');
// The JSON input string is converted to an object.
const object = JSON.parse('{"foo":"bar"}');
// The input object is converted to a JSON string.
const str = JSON.stringify({foo: 'bar'});
Syntax
JSON.parse(stringInput);
JSON.stringify(value);
Associated permissions
هیچ کدام.
Math
An object providing Math functions.
Syntax
const Math = require('Math');
// Retrieve the absolute value.
const absolute = Math.abs(-3);
// Round the input down to the nearest integer.
const roundedDown = Math.floor(3.6);
// Round the input up to the nearest integer.
const roundedUp = Math.ceil(2.2);
// Round the input to the nearest integer.
const rounded = Math.round(3.1);
// Return the largest argument.
const biggest = Math.max(1, 3);
// Return the smallest argument.
const smallest = Math.min(3, 5);
// Return the first argument raised to the power of the second argument.
const powerful = Math.pow(3, 1);
// Return the square root of the argument.
const unsquared = Math.sqrt(9);
پارامترها
Math function parameters are converted to numbers.
Associated permissions
هیچ کدام.
Messages
The following APIs work together to allow passing messages between different parts of a container.
addMessageListener
Adds a function that listens for a message of a particular type. When a message of that type is sent using the sendMessage API (typically by a tag), the callback will be run synchronously. The callback is run with two parameters:
-
messageType:string -
message:Object
If the callback is added in a client, the callback will receive messages across all of the events that client creates. If the callback should receive messages from only a certain event, then bind this API to the event using bindToEvent in the runContainer API's onStart function. See the example.
Syntax
const addMessageListener = require('addMessageListener');
addMessageListener('send_pixel', (messageType, message) => {
// This will be run whenever something sends a 'send_pixel' message.
});
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
messageType | رشته | The message type to listen for. If the value is not a string, it will be coerced to a string. |
callback | تابع | The callback to run when a message of the applicable message type is sent. If the callback is not a function, the API will do nothing. |
مثال
const addMessageListener = require('addMessageListener');
const claimRequest = require('claimRequest');
const extractEventsFromMpv1 = require('extractEventsFromMpv1');
const returnResponse = require('returnResponse');
const runContainer = require('runContainer');
claimRequest();
addMessageListener('send_pixel', (messageType, message) => {
// This will be run whenever a tag sends a 'send_pixel' message.
});
const events = extractEventsFromMpv1();
let eventsCompleted = 0;
events.forEach((event, i) => {
runContainer(events[i], /* onComplete= */ () => {
if (events.length === ++eventsCompleted) {
returnResponse();
}
}, /* onStart= */ (bindToEvent) => {
if (i === 0) {
bindToEvent(addMessageListener)('send_pixel', (messageType, message) => {
// This will be called whenever a tag for the first event sends a
// 'send_pixel' message.
});
}
});
});
Associated permissions
Requires use_message permission. The permission must be configured to permit at least:
- A message type with
Usageoflistenorlisten_and_send.
hasMessageListener
Returns true if a message listener has been added for the given message type. Returns false otherwise.
Syntax
const hasMessageListener = require('hasMessageListener');
hasMessageListener('send_pixel');
Associated permissions
هیچ کدام.
sendMessage
Sends a message of the specified type to a registered listener. This can be used to send messages from a tag back to the client that ran the container.
Syntax
const sendMessage = require('sendMessage');
sendMessage('send_pixel', {url: 'https://analytics.example.com/collect'});
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
messageType | رشته | The message type to send. If the value is not a string, it will be coerced to a string. |
message | شیء | The message to send. If the message is not an object, the API will do nothing. |
Associated permissions
Requires use_message permission. The permission must be configured to permit at least:
- A message type with
Usageoflisten_and_sendorsend.
Object
Returns an object that provides Object methods.
The keys() method provides the Standard Library Object.keys() behavior. It returns an array of a given object's own enumerable property names in the same order that a for...in... loop would. If the input value is not an object, it will be coerced to an object.
The values() method provides the Standard Library Object.values() behavior. It returns an array of a given object's own enumerable property values in the same order that a for...in... loop would. If the input value is not an object, it will be coerced to an object.
The entries() method provides the Standard Library Object.entries() behavior. It returns an array of a given object's own enumerable property [key, value] pairs in the same order that a for...in... loop would. If the input value is an not an object, it will be coerced to an object.
The freeze() method provides the Standard Library Object.freeze() behavior. A frozen object can no longer be changed; freezing an object prevents new properties from being added to it, existing properties from being removed, and the values of existing properties from being changed. freeze() returns the same object that was passed in. A primitive or null argument will be treated as if it were a frozen object, and will be returned.
The delete() method provides the Standard Library delete operator behavior. It removes the given key from the object unless the object is frozen. Like the Standard Library delete operator, it returns true if the first input value ( objectInput ) is an object that is not frozen even if the second input value ( keyToDelete ) specifies a key that does not exist. It returns false in all other cases. However, it differs from the Standard Library delete operator in the following ways:
-
keyToDeletecannot be a dot-delimited string that specifies a nested key. -
delete()cannot be used to remove elements from an array. -
delete()cannot be used to remove any properties from the global scope.
Syntax
Object.keys(objectInput)
Object.values(objectInput)
Object.entries(objectInput)
Object.freeze(objectInput)
Object.delete(objectInput, keyToDelete)
پارامترها
Object.keys
| پارامتر | نوع | توضیحات |
|---|---|---|
| objectInput | هر | The object whose keys to enumerate. If the input is not an object, it will be coerced to an object. |
Object.values
| پارامتر | نوع | توضیحات |
|---|---|---|
| objectInput | هر | The object whose values to enumerate. If the input is not an object, it will be coerced to an object. |
Object.entries
| پارامتر | نوع | توضیحات |
|---|---|---|
| objectInput | هر | The object whose key/value pairs to enumerate. If the input is not an object, it will be coerced to an object. |
Object.freeze
| پارامتر | نوع | توضیحات |
|---|---|---|
| objectInput | هر | The object to freeze. If the input is not an object, it will be treated as a frozen object. |
Object.delete
| پارامتر | نوع | توضیحات |
|---|---|---|
| objectInput | هر | The object whose key to delete. |
| keyToDelete | رشته | The top-level key to delete. |
مثال
const Object = require('Object');
// The keys of an object are enumerated in an array.
const keys = Object.keys({foo: 'bar'});
// The values of an object are enumerated in an array.
const values = Object.values({foo: 'bar'});
// The key/value pairs of an object are enumerated in an array.
const entries = Object.entries({foo: 'bar'});
// The input object is frozen.
const frozen = Object.freeze({foo: 'bar'});
// The key is removed from the input object.
const obj1 = {deleteme: 'value'};
Object.delete(obj1, 'deleteme');
// Only a top-level key can be specified as the key to delete.
const obj2 = {nested: {key: 'value'}};
Object.delete(obj2, 'nested.key'); // This has no effect.
Object.delete(obj2.nested, 'key'); // This deletes the nested key.
Promise
Returns an object that provides methods for interacting with promises.
Promises are functionally equivalent to JavaScript promises. Each instance has three methods that return a Promise which allows further action when a promise settles:
-
.then()- Handles both the resolved and rejected cases. It takes two callbacks as parameters: one for the success case and one for the failure case. -
.catch()- Handles the rejected cases only. Takes one callback as a parameter. -
.finally()- Provides a way for code to be run whether the promise was resolved or rejected. Takes one callback as a parameter that is invoked with no argument.
A variable that returns a promise equals the resolved value of the promise, or false if the promise rejects.
مثال
promise.then((resolvedValue) => {
// Handles when promise resolves.
}, (rejectedValue) => {
// Handles when promise rejects.
});
promise.catch((rejectedValue) => {
// Handles when promise rejects.
});
promise.finally(() => {
// Runs regardless of whether or not the previous promise resolves or
// rejects.
});
Promise.all
Returns a promise that either:
- resolves when all the inputs have resolved, or
- rejects when any of the inputs reject
Syntax
Promise.all(inputs);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
inputs | آرایه | An array of values or promises. If an input is not a promise, the input is passed through as if it's the resolved value of a promise. Throws an error if the input is not an array. |
مثال
const Promise = require('Promise');
const sendHttpGet = require('sendHttpGet');
return Promise.all(['a', sendHttpGet('https://example.com')])
.then((results) => {
// results will equal: ['a', {statusCode: 200, headers: {}, body: ''}]
});
Associated permissions
هیچ کدام.
Promise.create
Creates a promise that is functionally equivalent to a JavaScript promise.
Syntax
Promise.create(resolver);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
resolver | تابع | A function that is invoked with two functions -- resolve and reject. The returned promise will resolve or reject when the corresponding parameter is invoked. Throws an error if resolver is not a function. |
مثال
const Promise = require('Promise');
return Promise.create((resolve, reject) => {
// Do asynchronous work that eventually calls resolve() or reject()
});
Associated permissions
هیچ کدام.
API های تست
These APIs work with sandboxed JavaScript tests to build tests for custom templates in Google Tag Manager. These test APIs do not need a require() statement. [Learn more about custom template tests].
assertApi
Returns a matcher object that can be used to fluently make assertions about the given API.
Syntax
assertApi(apiName)
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
apiName | رشته | The name of the api to check; same string as passed to require() . |
Matchers
-
Subject.wasCalled() -
Subject.wasNotCalled() -
Subject.wasCalledWith(...expected) -
Subject.wasNotCalledWith(...expected)
مثالها
assertApi('sendPixel').wasCalled();
assertApi('getUrl').wasNotCalled();
assertApi('makeNumber').wasCalledWith('8');
assertApi('setInWindow').wasNotCalledWith('myVar', 'theWrongValue');
assertThat
The assertThat API is modeled after Google's [Truth] library. It returns an object that can be used to fluently make assertions about a subject's value. An assertion failure will immediately stop the test and mark it as failed. However, a failure in one test will not affect other test cases.
Syntax
assertThat(actual, opt_message)
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
actual | هر | The value to use in the fluent checks. |
opt_message | رشته | Optional message to print if the assertion fails. |
Matchers
| تطبیق دهنده | توضیحات |
|---|---|
isUndefined() | Asserts that the subject is undefined . |
isDefined() | Asserts that the subject is not undefined . |
isNull() | Asserts that the subject is null . |
isNotNull() | Asserts that the subject is not null . |
isFalse() | Asserts that the subject is false . |
isTrue() | Asserts that the subject is true . |
isFalsy() | Asserts that the subject is falsy. Falsy values are undefined , null , false , NaN , 0, and '' (empty string). |
isTruthy() | Asserts that the subject is truthy. Falsy values are undefined , null , false , NaN , 0, and '' (empty string). |
isNaN() | Asserts that the subject is the value NaN. |
isNotNaN() | Asserts that the subject is any value besides NaN. |
isInfinity() | Asserts that the subject is positive or negative Infinity. |
isNotInfinity() | Asserts that the subject is any value besides positive or negative Infinity. |
isEqualTo(expected) | Asserts that the subject is equal to the given value. This is a value comparison, not a reference comparison. The contents of objects and arrays are compared recursively. |
isNotEqualTo(expected) | Asserts that the subject is not equal to the given value. This is a value comparison, not a reference comparison. The contents of objects and arrays are compared recursively. |
isAnyOf(...expected) | Asserts that the subject is equal to one of the given value. This is a value comparison, not a reference comparison. The contents of objects and arrays are compared recursively. |
isNoneOf(...expected) | Asserts that the subject is not equal to any of the given values. This is a value comparison, not a reference comparison. The contents of objects and arrays are compared recursively. |
isStrictlyEqualTo(expected) | Asserts that the subject is strictly equal ( === ) to the given value. |
isNotStrictlyEqualTo(expected) | Asserts that the subject is not strictly equal ( !== ) to the given value. |
isGreaterThan(expected) | Asserts that the subject is greater than ( > ) the given value in an ordered comparison. |
isGreaterThanOrEqualTo(expected) | Asserts that the subject is greater than or equal to ( >= ) the given value in an ordered comparison. |
isLessThan(expected) | Asserts that the subject is less than ( < ) the given value in an ordered comparison. |
isLessThanOrEqualTo(expected) | Asserts that the subject is less than or equal to ( <= ) the given value in an ordered comparison. |
contains(...expected) | Asserts that the subject is an array or string that contains all of the given values in any order. This is a value comparison, not a reference comparison. The contents of objects and arrays are compared recursively. |
doesNotContain(...expected) | Asserts that the subject is an array or string that contains none of the given values. This is a value comparison, not a reference comparison. The contents of objects and arrays are compared recursively. |
containsExactly(...expected) | Asserts that the subject is an array that contains all of the given values in any order and no other values. This is a value comparison, not a reference comparison. The contents of objects and arrays are compared recursively. |
doesNotContainExactly(...expected) | Asserts that the subject is an array that has contains a different set of values from the given values in any order. This is a value comparison, not a reference comparison. The contents of objects and arrays are compared recursively. |
hasLength(expected) | Asserts that the subject is an array or string with the given length. The assertion always fails if the value is not an array or string. |
isEmpty() | Asserts that the subject is an array or string that is empty (length = 0). The assertion always fails if the value is not an array or string. |
isNotEmpty() | Asserts that the subject is an array or string that is not empty (length > 0). The assertion always fails if the value is not an array or string. |
isArray() | Asserts that the type of the subject is an array. |
isBoolean() | Asserts that the type of the subject is a boolean. |
isFunction() | Asserts that the type of the subject is a function. |
isNumber() | Asserts that the type of the subject is a number. |
isObject() | Asserts that the type of the subject is an object. |
isString() | Asserts that the type of the subject is a string. |
مثالها
assertThat(undefined).isUndefined();
assertThat(id, 'ID must be defined').isDefined();
assertThat(null).isNull();
assertThat(undefined).isNotNull();
assertThat(true).isTrue();
assertThat(false).isFalse();
assertThat(1).isTruthy();
assertThat('').isFalsy();
assertThat(1/0).isInfinity();
assertThat(0).isNotInfinity();
assertThat(-'foo').isNaN();
assertThat(100).isNotNaN();
assertThat(sentUrl).isEqualTo('https://endpoint.example.com/?account=12345');
assertThat(category).isNotEqualTo('premium');
assertThat(5).isAnyOf(1, 2, 3, 4, 5);
assertThat(42).isNoneOf('the question', undefined, 41.9);
assertThat('value').isStrictlyEqualTo('value');
assertThat('4').isNotStrictlyEqualTo(4);
assertThat(['a', 'b', 'c']).contains('a', 'c');
assertThat(['x', 'y', 'z']).doesNotContain('f');
assertThat(['1', '2', '3']).containsExactly('3', '2', '1');
assertThat(['4', '5']).doesNotContainExactly('4');
assertThat('a string').hasLength(8);
assertThat([]).isEmpty();
assertThat('another string').isNotEmpty();
fail
Immediately fails the current test and prints the given message, if supplied.
Syntax
fail(opt_message);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
opt_message | رشته | Optional error message text. |
مثال
fail('This test has failed.');
mock
The mock API allows you to override the behavior of Sandboxed APIs. The mock API is safe to use in template code, but it is operational only in test mode. Mocks are reset before each test is run.
Syntax
mock(apiName, returnValue);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
apiName | رشته | The name of the API to mock; same string as passed to require() |
returnValue | هر | The value to return for the API or a function called in place of the API. If returnValue is a function, that function is called in place of the Sandboxed API; if returnValue is anything other than a function, that value is returned in place of the Sandboxed API. |
مثالها
mock('encodeUri', "https://endpoint.example.com/?account=12345");
mock('sendPixel', function(url, onSuccess, onFailure) {
onSuccess();
});
mockObject
The mockObject API lets you override the behavior of Sandboxed APIs that return an object. The API is safe to use in template code, but it is operational only in test mode. Mocks are reset before each test is run.
Syntax
mockObject(apiName, objectMock);
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
apiName | رشته | The name of the API to mock; same string as passed to require() |
objectMock | شیء | The value to return for the API or a function called in place of the API. Must be an object. |
مثالها
const storage = {};
let firestoreId = 1;
function asTestPromise(result) {
return {
then: (callback) => callback(result)
};
}
mockObject('Firestore', {
write: (collection, input) => {
storage[collection + '/' + (++firestoreId)] = input;
return asTestPromise(firestoreId);
},
read: (document) => asTestPromise({data: storage[document]})
});
runCode
Runs the code for the template, ie the content of the Code tab, in the current test environment with a given input data object.
Syntax
runCode(data)
پارامترها
| پارامتر | نوع | توضیحات |
|---|---|---|
data | شیء | Data object to be used in the test. |
مقدار بازگشتی
Returns the value of a variable for variable templates; returns undefined for all other template types.
مثال
runCode({field1: 123, field2: 'value'});