Включить прокси-серверы Harmony в nodejs
-
11-12-2019 - |
Вопрос
Можно ли включить прокси-серверы EcmaScript 6 Harmony в nodejs?Если да, то каковы плюсы и минусы?И есть ли документация по их использованию?Спасибо !
Решение
Призывающий узел с node --harmony-proxies
должен сделать трюк.
Плюсы: Прокси - очень мощная функция, когда вы действительно нуждаетесь в них.
Минусы: прокси - это слишком мощная функция, когда вам не нужны (что должно быть большую часть времени).Кроме того, реализация все равно должна рассматриваться экспериментальная.
Что касается документации, все там действительно это банкомат - это Harmony Wiki, в частности эта страница, которая отражает текущую реализацию прокси в V8 (и, следовательно, узел):
Другие советы
Я рекомендую отражение гармонии, что позволяет легко, например.настроить получение/установку ловушек:
ОБНОВЛЯТЬ осторожно, ниже CoffeeScript
require 'harmony-reflect'
handler =
get: ( target, name ) ->
console.log 'get' name
return target[ name ]
set: ( target, name, value ) ->
console.log 'set' name
target[ '%is-clean' ] = no if value isnt target[ name ]
if value is undefined then delete target[ name ]
else target[ name ] = value
return value
clean = ( x ) ->
x[ '%is-clean' ] = yes
return x
p = Proxy {}, handler
p[ 'a' ] = 1
p[ 'b' ] = undefined
console.log p[ 'a' ], p[ 'b' ]
console.log "c" of p, p[ 'c' ]
console.log p
clean p
p[ 'a' ] = 1
console.log p
p[ 'a' ] = 42
console.log p
вышеприведенный код представляет собой начальный код для «сохранения прозрачного объекта» в JavaScript.с использованием harmony-reflect
, становится тривиально сделать так, чтобы все get
и set
действия над объектом перехватываются — в этой демонстрации мы установили %is-clean
атрибут, чтобы мы могли проверить, были ли изменены члены объекта, а также удалить элементы, которым присвоено значение undef.
Вы можете использовать PIMPED-прокси, который легкая реализация прокси, создание декларации проще и совместима на ES5. В отличие от родного прокси, он может только прокси свойства, известные при времени создания.
Proxy
теперь доступен в родом в версиях узла>= 6.
Garmony Proxies не будет работать все это хорошо для Nodejs, потому что они эффективно синхронно-функциональные вызовы типа.То есть вы не можете реализовать прокси-метод, который async.
Смотрите этот репозиторий GitHUB для примеров: https://github.com/mschwartz/silkjs-harmony