Как добавить модуль NPM (десятичный) в ArangoDB для выполнения транзакций ACID тогда

Я хотел бы выполнять транзакции ACID с ArangoDB. И я хотел бы отправить код транзакции (nodejs-code) на сервер ArangoDB, где он затем будет выполнен и, надеюсь, зафиксирован или откат, если он не удастся. Но на стороне сервера ArangoDB мне нужен модуль NPM Decimal или вызываемый пакет.

Как его установить и как получить доступ к этому конкретному модулю из кода транзакции внутри?

Привет и спасибо.


person europeanguy    schedule 28.05.2014    source источник
comment
Вы имеете в виду десятичный (npmjs.org/package/decimal) или десятичный (npmjs.org/package/Deci-mal)?   -  person fceller    schedule 29.05.2014
comment
Я имею в виду первую. десятичный. (опубликовано shinuza). (npmjs.org/package/decimal)   -  person europeanguy    schedule 29.05.2014
comment
Я попытался скопировать десятичный каталог этого пакета NPM в / usr / share / arangodb / js / server / modules. И затем я запустил arangosh: $ arangosh --javascript.modules-path / usr / share / arangodb / js / server / modules. Внутри арангоша я сделал такую ​​команду: var deci = require (decimal); Но это не работает. У тебя есть какие-либо идеи? Decimal кажется очень маленьким удобным пакетом npm. Всего несколько строк кода. Думаю, там нет зависимостей.   -  person europeanguy    schedule 29.05.2014
comment
Хотя могут быть лучшие места для размещения модуля, следующее, похоже, работает нормально: если вы хотите получить к нему доступ из arangosh и arangod, вы можете скопировать его в / usr / share / arangodb / js / common / modules (вместо. ../js/server/modules). Если затем вы запускаете arangosh регулярно (без дополнительных модулей-path), он должен иметь возможность подбирать модуль и разрешать использовать его через require (decimal). То же должно работать изнутри arangod. Внутри транзакции вы также можете использовать модуль через require (decimal).   -  person stj    schedule 29.05.2014
comment
Я попробовал, но он не работает. Когда я копирую десятичный модуль npm и его полную файловую структуру в / usr / share / arangodb / js / common / modules, он не работает. Также не работает запуск арангоша с разными путями. Но когда я копирую только файл decimal.js в / usr / share / arangodb / js / common / modules, он работает нормально. Затем в Арангоше я могу получить к нему доступ через: var deci = require (decimal); а затем console.log (deci ('4'). add ('5'). toString ()); так что теперь я счастлив, что он работает так, как я хочу. Но мы не смогли добавить еще один модуль NPM большего размера.   -  person europeanguy    schedule 29.05.2014


Ответы (2)


Если у вас есть десятичный модуль в нужном месте и вы можете потребовать его должным образом внутри arangod, вы сможете использовать его внутри транзакции, например:

db._executeTransaction({ 
  collections: { }, 
  action: function (params) { 
    var Decimal = require("decimal"); 
    return Decimal(params.foo).add(params.bar).toNumber(); 
  }, 
  params: { 
    foo: '1.1', 
    bar: '2.2' 
  } 
});

Если вашим транзакциям нужен доступ к коллекции, вам, очевидно, нужно указать их имена в атрибуте "collections", например

db._executeTransaction({ 
  collections: { 
    write: [ "test" ]
  }, 
  action: function (params) { 
    var Decimal = require("decimal");
    var collection = require("org/arangodb").db.test;
    var amount = Decimal(params.foo).add(params.bar).toNumber(); 

    return collection.save({ _key: params.key, amount: amount }); 
  }, 
  params: { 
    key: "mykey",
    foo: '1.1', 
    bar: '2.2' 
  } 
});
person stj    schedule 28.05.2014

stj уже ответил на транзакционную часть вопроса. По поводу установки модулей NPM.

Перейти в папку

/usr/share/arangodb/js/common/node

и выполнить

npm install decimal

Это должно установить модуль NODE как для сервера (arangod), так и для оболочки (arangosh).

person fceller    schedule 29.05.2014
comment
Спасибо вам обоим. Теперь я открыл новый вопрос. Транзакции ArangoDB - Как предотвратить создание исключений stackoverflow.com/questions/23934058/ - person europeanguy; 29.05.2014
comment
@fceller Ваши инструкции все еще действительны, начиная с версии Arango 2.8.9? В моем каталоге common есть подкаталоги boostrap и modules, но нет подкаталога node. - person ropeladder; 06.06.2016