node.js — ArangoDB с пользовательским JS

ArangoDB с пользовательским JS

Да, это можно сделать с помощью действий пользователя . Foxx был создан как более удобная альтернатива и, вероятно, лучший выбор для нетривиальных приложений. Документация может быть пугающей, но сервисы Foxx могут быть очень легкими и простыми (см. Мой другой ответ). Если вы действительно не хотите использовать Foxx для этого, вот как это сделать вручную:

Сначала создайте виртуальный модуль в системной коллекции _modules :

 var db = require('org/arangodb').db; db._modules.save({ path: '/db:/ownTest', content: ` exports.do = function (req, res, options, next) { res.body = 'test'; res.responseCode = 200; res.contentType = 'text/plain'; }; ` }); 

Затем создайте маршрут, который использует его:

 db._routing.save({ url: '/ourtest', action: { controller: 'db://ownTest' } }); 

Наконец, скажите ArangoDB обновить свой кэш маршрутизации, чтобы он заметил новый маршрут:

 require('internal').reloadRouting(); 

Если вы устанавливаете свой модуль JavaScript в каталог js/common/ или js/server/ вы можете использовать имя myOnDiskModule (например, myOnDiskModule ) вместо имени виртуального модуля "db://owntest" в controller .

Для небольших модулей вы можете просто определить встроенную функцию, используя callback вместо controller :

 db._routing.save({ url: '/hello/echo', action: { callback: ` function (req, res) { res.statusCode = 200; res.body = require('js-yaml').safeDump({ Hello: 'World', are: 'you here?' }); } ` } }); 

Не забывайте всегда обновлять кэш маршрутизации после внесения изменений в коллекцию маршрутизации:

 require('internal').reloadRouting(); 

Примечание: реализация callback в 2.8 имеет ошибку, которая будет исправлена ​​в 2.8.3. Если вы хотите применить исправление вручную, оно находится в коммите b714dc5 .

Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector