mirror of https://gitee.com/bigwinds/arangodb
82 lines
3.0 KiB
Plaintext
82 lines
3.0 KiB
Plaintext
!CHAPTER Developing an Application
|
||
|
||
|
||
While developing a Foxx application, it is recommended to use the development
|
||
mode. The development mode makes ArangoDB reload all components of all Foxx
|
||
applications on every request. While this has a negative impact on performance,
|
||
it allows to view and debug changes in the application instantly. It is not
|
||
recommended to use the development mode in production.
|
||
|
||
During development it is often necessary to log some debug output. ArangoDB
|
||
provides a few mechanisms for this:
|
||
|
||
* using *console.log*:
|
||
ArangoDB provides the *console* module, which you can use from within your
|
||
Foxx application like this:
|
||
|
||
require("console").log(value);
|
||
|
||
The *console* module will log all output to ArangoDB's logfile. If you are
|
||
not redirecting to log output to stdout, it is recommended that you follow
|
||
ArangoDB's logfile using a *tail -f* command or something similar.
|
||
Please refer to [JSModuleConsole](../ModuleConsole/README.md) for details.
|
||
|
||
* using *internal.print*:
|
||
The *print* method of the *internal* module writes data to the standard
|
||
output of the ArangoDB server process. If you have start ArangoDB manually
|
||
and do not run it as an (unattended) daemon, this is a convenient method:
|
||
|
||
require("internal").print(value);
|
||
|
||
* tapping requests / responses:
|
||
Foxx allows to tap incoming requests and outgoing responses using the *before*
|
||
and *after* hooks. To print all incoming requests to the stdout of the ArangoDB
|
||
server process, you could use some code like this in your controller:
|
||
|
||
controller.before("/*", function (req, res) {
|
||
require("internal").print(req);
|
||
});
|
||
|
||
Of course you can also use *console.log* or any other means of logging output.
|
||
|
||
!SECTION Development Mode
|
||
|
||
If you start ArangoDB with the option *--javascript.dev-app-path* followed by
|
||
the path to an app directory (see below) and then the path to the database,
|
||
you are starting ArangoDB in development mode with the application loaded.
|
||
|
||
This means that on every request:
|
||
|
||
1. All routes are dropped
|
||
2. All module caches are flushed
|
||
3. Your manifest file is read
|
||
4. All files in your lib folder are loaded
|
||
5. An app in DIRNAME is mounted at */dev/DIRNAME*
|
||
6. The request will be processed
|
||
|
||
This means that you do not have to restart ArangoDB if you change anything
|
||
in your app. It is of course not meant for production, because the reloading
|
||
makes the app relatively slow.
|
||
|
||
The app directory has to be structured as follows:
|
||
|
||
```
|
||
└── databases
|
||
├── _system
|
||
│ ├── foxx_app_1
|
||
│ ├── foxx_app_2
|
||
│ └── foxx_app_3
|
||
└── my_db
|
||
└── foxx_app_4
|
||
```
|
||
|
||
In this case you would have four foxx apps booted, three in the *_system* database
|
||
and one in the *my_db* database.
|
||
|
||
!SECTION Production Mode
|
||
|
||
To run a Foxx app in production first copy your app code to the directory given in
|
||
the config variable *--javascript.app-path*. After that use Foxx manager to mount the app.
|
||
You can also use Foxx manager to find out your current app-path.
|
||
|