Используя документацию ArangoDB версия 3.3 или версия 3.4 для раздела «Начало работы» микросервисов Foxx, я не могу обойти эту ошибку:
Failed to load API definition.
NetworkError when attempting to fetch resource. http://192.168.1.1:8529/_db/_system/_admin/aardvark/foxxes/docs/swagger.json?mount=/getting-started
Эта ошибка отображается на вкладке API службы. После установки службы в соответствии с инструкциями я получаю карточку службы, как описано. Я щелкаю эту карточку, а затем щелкаю вкладку API, и отображается указанная выше ошибка.
Чтобы устранить опечатки, я попытался скопировать и вставить точное содержимое файла из документации ArangoDB и точно следовать каждому шагу, но все равно получаю ту же ошибку.
Вкладка Информация моей недавно созданной службы getting-started
содержит эту информацию:
Author:
Mount: /getting-started
Mode: Development
Version: Unknown
Version License: Unknown License
Path: /var/lib/arangodb3-apps/_db/_system/getting-started/APP
В примере всего два файла:
manifest.json
{
"engines": {
"arangodb": "^3.0.0"
},
"main": "index.js"
}
index.js
'use strict';
const createRouter = require('@arangodb/foxx/router');
const router = createRouter();
module.context.use(router);
router.get('/hello-world', function (req, res) {
res.send('Hello World!');
})
.response(['text/plain'], 'A generic greeting.')
.summary('Generic greeting')
.description('Prints a generic greeting.');
Готовые демонстрационные сервисы, такие как пример hello-fox, работают правильно. Я собрал дополнительную информацию об ошибке:
Переход к http://192.168.1.1:8529/getting-started
404: errorMessage "unknown path '/getting-started'"
Переход к http://192.168.1.1:8529/_db/_system/getting-started
404: errorMessage "unknown path '/getting-started'"
Консоль также показывает:
WARNING File not found "/getting-started": file "" does not exist in "/var/lib/arangodb3-apps/_db/_system/getting-started/APP/files".
В руководстве не указан другой файл с именем getting-started
или другое расположение для двух указанных файлов. Что мне не хватает?
@ camba1 - спасибо. Моя ошибка: файл не найден "/ начало работы": файл "" не существует в "/ var / lib / arangodb3-apps / _db / _system / Getting-start / APP / fil es".
Попробуйте добавить «main» в свой файл манифеста и указать его на index.js. Предполагая, что index.js находится в том же каталоге, что и ваш манифест, попробуйте: {"Engine": {"arangodb": "^ 3.0.0"}, "main": "index.js"} С точки зрения адреса конечной точки ваш сервис размещен на, это должно быть что-то вроде: http://localhost:8529/_db/_system/testService/hello-world
@ camba1 - ArangoDB работает на локальном компьютере, и я могу получить доступ к веб-интерфейсу через 192.168.1.1:8529 нормально. Другие службы работают. Я снова добавил "main": "index.js". Я пробовал это раньше, но все равно получаю ту же ошибку. Что касается конечной точки, я пробовал http://192.168.1.1:8529/getting-started
и http://192.168.1.1:8529/_db/_system/getting-started
. Я не уверен насчет элемента пути testService
в вашем комментарии, потому что ничто в учебнике не говорит мне создавать каталог в любом месте. Веб-интерфейс Arango устанавливает мой zip-файл здесь /var/lib/arangodb3-apps/_db/_system/getting-started/
В учебнике Аранго написано You will need to provide a mount path, which is the URL prefix at which the service will be mounted (e.g. /getting-started)
. Поэтому я использовал /getting-started
. Однако теперь я замечаю, что у маршрутизатора есть путь, определенный как /hello-world
. Изменение этого на / начало-начало` не устранило мою ошибку, но полное удаление пути исправило ее. Ясно, что я чего-то не понимаю в требуемых путях и конечных точках. Я смущен.
Извините за путаницу с конечной точкой, это был всего лишь пример. Для вас это будет 192.168.1.1:8529/_db/_system/getting-started/hello-world. Также я вижу службу в режиме разработки. Таким образом, сервис перезагружается каждый раз, когда вы его открываете. и вы можете изменять свои файлы прямо в / var / lib / arangodb3-apps / _db / _system / getting-started / вместо того, чтобы загружать новый zip-файл каждый раз, когда вы вносите изменения (не решает вашу проблему, но упрощает отладку ). Также журнал показывает настоящую ошибку. Как вы, наверное, уже догадались, в графическом интерфейсе сервиса отображается обычная ошибка.
Ваш последний комментарий и некоторые эксперименты наконец прояснили это для меня. Вы хотите дать мне ответ, чтобы я согласился?
Эта проблема была решена на основе полезных комментариев @ camba1. С Аранго проблем не было, просто проблема с пониманием учебника. Для других, занимающих мое положение, вот вещи, которых я не понял должным образом, и когда к ним обратились, я решил мои проблемы.
Вкладка API, в отличие от того, что говорится в руководстве, выдаст ошибку «Не удалось загрузить определение API» даже для правильно работающей службы. Игнорируйте это сообщение об ошибке. Я еще не использую вкладку API.
в руководстве используются два пути: «/ hello-world» и «/ Getting-started». Они используются в конечной точке (URI) и при создании маршрутизатора, как показано ниже:
router.get('/hello-world', function (req, res) { ...
Учебное пособие не было таким ясным, как могло бы быть по этому поводу, но, как указал @ camba1, конечная точка службы в конечном итоге будет включать оба этих элемента:
192.168.1.1:8529/_db/_system/getting-started/hello-world .
эта очень простая демонстрация, на мой взгляд, проще и лучше, когда маршрутизатор создается без пути:
router.get(function (req, res) {
В этом случае по умолчанию используется путь из '/'. Думаю, это поможет избежать путаницы для таких новичков, как я. Тогда конечная точка службы становится на один элемент проще. В моем случае конечная точка (когда Arango работает на другом компьютере в локальной сети) становится:
192.168.1.1:8529/_db/_system/getting-started
Учебник можно было бы улучшить, если бы он либо добавил пару дополнительных предложений, объясняющих, как построена конечная точка, либо, в качестве альтернативы, сделал бы то, что я предлагал выше, и упростил бы вещи на один шаг.
Для всех, кто это читал, я обновился с ArangoDB 3.3.19 до 3.4, и эти простые демонстрации, которые работали, больше не работают. Что-то в определении пути в router.get, похоже, изменилось.
Могу я спросить вас, @BugBuddy, как установить @ arangodb / foxx? Не нашел: npmjs.com/search?q=%40arangodb
После появления сообщения об ошибке проверьте журналы в веб-интерфейсе (не забудьте обновить страницу, так как она не обновляется сама по себе). Есть ли там сообщение об ошибке?