Database API
new Database
new Database([config]): Database
Creates a new Database instance.
If config is a string, it will be interpreted as config.url.
Arguments
-
config:
Object
(optional)An object with the following properties:
-
url:
string | Array<string>
(Default:http://localhost:8529
)Base URL of the ArangoDB server or list of server URLs.
When working with a cluster or a single server with leader/follower failover, the method
db.acquireHostList
can be used to automatically pick up additional coordinators/followers at any point.When running ArangoDB on a unix socket, e.g.
/tmp/arangodb.sock
, the following URL formats are supported for unix sockets:unix:///tmp/arangodb.sock
(no SSL)http+unix:///tmp/arangodb.sock
(orhttps+unix://
for SSL)http://unix:/tmp/arangodb.sock
(orhttps://unix:
for SSL)
Additionally
ssl
andtls
are treated as synonymous withhttps
andtcp
is treated as synonymous withhttp
, so the following URLs are considered identical:tcp://localhost:8529
andhttp://localhost:8529
ssl://localhost:8529
andhttps://localhost:8529
tcp+unix:///tmp/arangodb.sock
andhttp+unix:///tmp/arangodb.sock
ssl+unix:///tmp/arangodb.sock
andhttps+unix:///tmp/arangodb.sock
tcp://unix:/tmp/arangodb.sock
andhttp://unix:/tmp/arangodb.sock
ssl://unix:/tmp/arangodb.sock
andhttps://unix:/tmp/arangodb.sock
If you want to use ArangoDB with authentication, see useBasicAuth or useBearerAuth methods.
If you need to support self-signed HTTPS certificates, you may have to add your certificates to the agentOptions, e.g.:
... agentOptions: { ca: [ fs.readFileSync(".ssl/sub.class1.server.ca.pem"), fs.readFileSync(".ssl/ca.pem") ] }
Although this is strongly discouraged, it’s also possible to disable HTTPS certificate validation entirely, but note this has extremely dangerous security implications:
... agentOptions: { rejectUnauthorized: false }
-
isAbsolute:
boolean
(Default:false
)If this option is explicitly set to
true
, the url will be treated as the absolute database path and arangojs will not append the database path to it.Note: This makes it impossible to switch databases with useDatabase or using acquireHostList. This is only intended to be used as an escape hatch when working with standalone servers exposing a single database API from behind a reverse proxy, which is not a recommended setup.
-
arangoVersion:
number
(Default:30000
)Numeric representation of the ArangoDB version the driver should expect. The format is defined as
XYYZZ
whereX
is the major version,Y
is the zero-filled two-digit minor version andZ
is the zero-filled two-digit bugfix version, e.g.30102
for 3.1.2,20811
for 2.8.11.Depending on this value certain methods may become unavailable or change their behavior to remain compatible with different versions of ArangoDB.
-
headers:
Object
(optional)An object with additional headers to send with every request.
Header names should always be lowercase. If an
"authorization"
header is provided, it will be overridden when using useBasicAuth or useBearerAuth. -
agent:
Agent
(optional)An http Agent instance to use for connections.
By default a new
http.Agent
(or https.Agent) instance will be created using the agentOptions.This option has no effect when using the browser version of arangojs.
-
agentOptions:
Object
(Default: see below)An object with options for the agent. This will be ignored if agent is also provided.
Default:
{maxSockets: 3, keepAlive: true, keepAliveMsecs: 1000}
. Browser default:{maxSockets: 3, keepAlive: false}
;The option
maxSockets
can also be used to limit how many requests arangojs will perform concurrently. The maximum number of requests is equal tomaxSockets * 2
withkeepAlive: true
or equal tomaxSockets
withkeepAlive: false
.In the browser version of arangojs this option can be used to pass additional options to the underlying calls of the
xhr
module. -
loadBalancingStrategy:
string
(Default:"NONE"
)Determines the behavior when multiple URLs are provided:
-
NONE
: No load balancing. All requests will be handled by the first URL in the list until a network error is encountered. On network error, arangojs will advance to using the next URL in the list. -
ONE_RANDOM
: Randomly picks one URL from the list initially, then behaves likeNONE
. -
ROUND_ROBIN
: Every sequential request uses the next URL in the list.
-
-
maxRetries:
number
orfalse
(Default:0
)Determines the behavior when a request fails because the underlying connection to the server could not be opened (i.e.
ECONNREFUSED
in Node.js):-
false
: the request fails immediately. -
0
: the request is retried until a server can be reached but only a total number of times matching the number of known servers (including the initial failed request). -
any other number: the request is retried until a server can be reached the request has been retried a total of
maxRetries
number of times (not including the initial failed request).
When working with a single server without leader/follower failover, the retries (if any) will be made to the same server.
This setting currently has no effect when using arangojs in a browser.
Note: Requests bound to a specific server (e.g. fetching query results) will never be retried automatically and ignore this setting.
-
-
database.acquireHostList
async database.acquireHostList(): this
Updates the URL list by requesting a list of all coordinators in the cluster and adding any endpoints not initially specified in the url configuration.
For long-running processes communicating with an ArangoDB cluster it is recommended to run this method repeatedly (e.g. once per hour) to make sure new coordinators are picked up correctly and can be used for fail-over or load balancing.
Note: This method can not be used when the arangojs instance was created
with isAbsolute: true
.
database.useDatabase
database.useDatabase(databaseName): this
Updates the Database instance and its connection string to use the given databaseName, then returns itself.
Note: This method can not be used when the arangojs instance was created
with isAbsolute: true
.
Arguments
-
databaseName:
string
The name of the database to use.
Examples
const db = new Database();
db.useDatabase("test");
// The database instance now uses the database "test".
database.useBasicAuth
database.useBasicAuth([username, [password]]): this
Updates the Database instance’s authorization
header to use Basic
authentication with the given username and password, then returns itself.
Arguments
-
username:
string
(Default:"root"
)The username to authenticate with.
-
password:
string
(Default:""
)The password to authenticate with.
Examples
const db = new Database();
db.useDatabase("test");
db.useBasicAuth("admin", "hunter2");
// The database instance now uses the database "test"
// with the username "admin" and password "hunter2".
database.useBearerAuth
database.useBearerAuth(token): this
Updates the Database instance’s authorization
header to use Bearer
authentication with the given authentication token, then returns itself.
Arguments
-
token:
string
The token to authenticate with.
Examples
const db = new Database();
db.useBearerAuth("keyboardcat");
// The database instance now uses Bearer authentication.
database.login
async database.login([username, [password]]): string
Validates the given database credentials and exchanges them for an authentication token, then uses the authentication token for future requests and returns it.
Arguments
-
username:
string
(Default:"root"
)The username to authenticate with.
-
password:
string
(Default:""
)The password to authenticate with.
Examples
const db = new Database();
db.useDatabase("test");
await db.login("admin", "hunter2");
// The database instance now uses the database "test"
// with an authentication token for the "admin" user.
database.version
async database.version(): Object
Fetches the ArangoDB version information for the active database from the server.
Examples
const db = new Database();
const version = await db.version();
// the version object contains the ArangoDB version information.
database.close
database.close(): void
Closes all active connections of the database instance. Can be used to clean up idling connections during longer periods of inactivity.
Note: This method currently has no effect in the browser version of arangojs.
Examples
const db = new Database();
const sessions = db.collection("sessions");
// Clean up expired sessions once per hour
setInterval(async () => {
await db.query(aql`
FOR session IN ${sessions}
FILTER session.expires < DATE_NOW()
REMOVE session IN ${sessions}
`);
// Make sure to close the connections because they're no longer used
db.close();
}, 1000 * 60 * 60);