EdgeScript (ES) menyediakan enam fungsi logika untuk membangun ekspresi kondisional dalam aturan CDN: and, or, not, eq, ne, dan null. Tiga operator Boolean (and, or, not) mendukung evaluasi short-circuit, sehingga mesin berhenti mengevaluasi argumen begitu hasilnya telah ditentukan.
Rangkuman fungsi
| Fungsi | Signature | Short-circuit | Nilai Kembali |
|---|---|---|---|
and | and(arg, ...) : Boolean | Berhenti pada false | true jika semua argumen bernilai true |
or | or(arg, ...) : Boolean | Berhenti pada true | true jika ada argumen yang bernilai true |
not | not(arg) : Boolean | — | Boolean terbalik |
eq | eq(arg1, arg2) : Boolean | — | true jika sama |
ne | ne(arg1, arg2) : Boolean | — | true jika tidak sama |
null | null(v) : Boolean | — | true jika v adalah string kosong, array kosong, atau dictionary kosong |
and
Signature: and(arg, ...) : Boolean
Menjalankan operator logika AND. Jika salah satu argumen dievaluasi sebagai false, evaluasi short-circuit berhenti dan argumen sisanya dilewati.
Parameter: Satu atau lebih nilai dengan tipe apa pun.
Nilai kembalian: true jika semua nilai dievaluasi sebagai true; false jika ada nilai yang dievaluasi sebagai false.
Contoh: Tetapkan header respons hanya ketika parameter kueri tertentu tersedia dan sesuai dengan nilai yang ditentukan.
if and($arg_mode, eq($arg_mode, 'set_header')) {
add_rsp_header('USER-DEFINED-1','path1')
}Jika permintaan mencakup
mode=set_header,and()mengevaluasi kedua kondisi dan mengembalikantrue. Header responsUSER-DEFINED-1ditetapkan.Jika permintaan tidak memiliki parameter
mode,$arg_modedievaluasi sebagaifalse. Evaluasi short-circuit berhenti —eq()tidak pernah dipanggil — dan header respons tidak ditetapkan.
or
Signature: or(arg, ...) : Boolean
Menjalankan operator logika OR. Jika salah satu argumen dievaluasi sebagai true, evaluasi short-circuit berhenti dan argumen sisanya dilewati.
Parameter: Satu atau lebih nilai dengan tipe apa pun.
Nilai kembalian: true jika ada nilai yang dievaluasi sebagai true; false jika semua nilai dievaluasi sebagai false.
Contoh: Arahkan ulang permintaan berdasarkan nilai header From.
if and($http_from, or(eq($http_from, 'wap'), eq($http_from, 'comos'))) {
rewrite(concat('http://example.com.cn/zt_d/we2015/', $http_from), 'enhance_redirect')
}Jika header
Frombernilaiwapataucomos, permintaan diarahkan ulang (HTTP 302) kehttp://example.com.cn/zt_d/we2015/[wap|comos].Jika header
Frombernilaiwap,or()langsung mengembalikantrue— pemeriksaan terhadapcomosdilewati.
not
Signature: not(arg) : Boolean
Menjalankan operator logika NOT. Nilai undef dan false dievaluasi sebagai false, sedangkan nilai lain dievaluasi sebagai true.
Parameter: Tepat satu nilai dengan tipe apa pun.
Nilai kembalian: true atau false.
Contoh: Blokir permintaan yang tidak memiliki parameter atau cookie yang diperlukan.
if not($arg_key) {
exit(403)
}
if not($cookie_user) {
exit(403, 'not cookie user')
}
if not(0) {
exit(403)
}
if not(false) {
exit(403)
}not($arg_key)— jika permintaan tidak memiliki parameter kuerikey,$arg_keybernilaiundef.not(undef)mengembalikantrue, dan permintaan diakhiri dengan HTTP 403.not($cookie_user)— jika permintaan tidak memiliki cookiecookie_user,$cookie_userbernilaiundef.not(undef)mengembalikantrue, dan permintaan diakhiri dengan HTTP 403 beserta isi responsnot cookie user.not(0)— mengembalikanfalse. Blok tersebut tidak dijalankan.not(false)—falsebernilai falsy, sehingganot(false)mengembalikantrue. Blok tersebut dijalankan dan diakhiri dengan HTTP 403.
eq
Signature: eq(arg1: any, arg2: same type as arg1) : Boolean
Membandingkan apakah dua nilai sama.
Parameter:
arg1: Nilai pertama. Tipe data: apa pun.arg2: Nilai kedua. Tipe data: sama denganarg1.
Nilai kembalian: true jika kedua nilai sama; false jika tidak.
Contoh: Contoh berikut menggabungkan eq dan ne di dalam pemanggilan and(). Lihat bagian ne untuk penjelasan lengkapnya.
key1 = 'value1'
key2 = 'value2'
if and($arg_k1, $arg_k2, eq(key1, $arg_k1), ne(key2, $arg_k2)) {
say('match condition')
}ne
Signature: ne(arg1: any, arg2: same type as arg1) : Boolean
Membandingkan apakah dua nilai tidak sama.
Parameter:
arg1: Nilai pertama. Tipe data: apa pun.arg2: Nilai kedua. Tipe data: sama denganarg1.
Nilai kembalian: true jika kedua nilai tidak sama; false jika tidak.
Contoh: Sesuaikan permintaan hanya ketika kedua parameter kueri tersedia dan memenuhi kondisi nilai tertentu.
key1 = 'value1'
key2 = 'value2'
if and($arg_k1, $arg_k2, eq(key1, $arg_k1), ne(key2, $arg_k2)) {
say('match condition')
}Keempat kondisi harus bernilai true agar blok tersebut dijalankan:
Permintaan mencakup parameter
k1.Permintaan mencakup parameter
k2.Nilai
k1sama denganvalue1(diperiksa oleheq).Nilai
k2tidak sama denganvalue2(diperiksa olehne).
Jika permintaan tidak memiliki k1 atau k2, evaluasi short-circuit berhenti pada langkah 1 atau 2, dan baik eq() maupun ne() tidak dipanggil.
null
Signature: null(v: array | dictionary | string) : Boolean
Memeriksa apakah suatu tipe data ditentukan untuk EdgeScript (ES).
Parameter: v — array, dictionary, atau string. Melewatkan tipe data lain akan mengembalikan false.
Nilai kembalian: Boolean.
true— jikavadalah string kosong, atau array/dictionary tanpa elemen.false— jikavadalah string tidak kosong, array/dictionary tidak kosong, atau tipe data lainnya.
Contoh:
d = []
say(null(d))
set(d, 1, 'v1')
say(null(d))
say(tostring(null('x')))
say(tostring(null('')))Output:
true
false
false
truenull(d)pada array kosong[]mengembalikantrue.Setelah
set(d, 1, 'v1'), array menjadi tidak kosong, sehingganull(d)mengembalikanfalse.null('x')— string tidak kosong — mengembalikanfalse.null('')— string kosong — mengembalikantrue.