Manifest
Many of the fields that were required in ArangoDB 2.x are now optional and can be safely omitted.
To avoid compatibility problems with future versions of ArangoDB you should always specify the engines
field, e.g.:
{
"engines": {
"arangodb": "^3.0.0"
}
}
Controllers & exports
Previously Foxx distinguished between exports
and controllers
, each of which could be specified as an object. In ArangoDB 3.0 these have been merged into a single main
field specifying an entry file.
The easiest way to migrate services using multiple exports and/or controllers is to create a separate entry file that imports these files:
Old (manifest.json):
{
"exports": {
"doodads": "doodads.js",
"dingbats": "dingbats.js"
},
"controllers": {
"/doodads": "routes/doodads.js",
"/dingbats": "routes/dingbats.js",
"/": "routes/root.js"
}
}
New (manifest.json):
{
"main": "index.js"
}
New (index.js):
'use strict';
module.context.use('/doodads', require('./routes/doodads'));
module.context.use('/dingbats', require('./routes/dingbats'));
module.context.use('/', require('./routes/root'));
module.exports = {
doodads: require('./doodads'),
dingbats: require('./dingbats')
};
Index redirect
If you previously did not define the defaultDocument
field, please note that in ArangoDB 3.0 the field will no longer default to the value index.html
when omitted:
Old:
{
// no defaultDocument
}
New:
{
"defaultDocument": "index.html"
}
This also means it is no longer necessary to specify the defaultDocument
field with an empty value to prevent the redirect and be able to serve requests at the /
(root) path of the mount point:
Old:
{
"defaultDocument": ""
}
New:
{
// no defaultDocument
}
Assets
The assets
field is no longer supported in ArangoDB 3.0 outside of legacy compatibility mode.
If you previously used the field to serve individual files as-is you can simply use the files
field instead:
Old:
{
"assets": {
"client.js": {
"files": ["assets/client.js"],
"contentType": "application/javascript"
}
}
}
New:
{
"files": {
"client.js": {
"path": "assets/client.js",
"type": "application/javascript"
}
}
}
If you relied on being able to specify multiple files that should be concatenated, you will have to use build tools outside of ArangoDB to prepare these files accordingly.
Root element
The rootElement
field is no longer supported and has been removed entirely.
If your controllers relied on this field being available you need to adjust your schemas and routes to be able to handle the full JSON structure of incoming documents.
System services
The isSystem
field is no longer supported. The presence or absence of the field had no effect in most recent versions of ArangoDB 2.x and has now been removed entirely.