jsonApi.setConfig({
// (optional): An express Router to bind to instead of building a new Express server
router: null, // result of `express.Router()`
// (optional) An alias of the absolute portion of URLs generated in a response file
// eg http://localhost:16006/some-resource/ -> https://www.example.com/my-api/some-resource/
urlPrefixAlias: "https://www.example.com/my-api/",
// (optional) HTTP / HTTPS
protocol: "http",
// (optional) The hostname the API will be sat behind, from the customer's perspective
hostname: "localhost",
// (required) The port the customer will be using (OPTIONAL)
port: 16006,
// (optional) Define a url prefix for the apiConfig
// eg http://-----/rest/
base: "rest",
// (optional) meta block to appear in the root of every response
meta: {
copyright: "Blah"
},
// Should the interactive GraphQL HTTP interface be served up?
graphiql: true,
// (optional) meta can be a function to be invoked at the end of every request
meta: function(request) {
return { timestamp: new Date() };
},
// (optional) bodyParserJsonOpts allows setting the options passed to the json body parser,
// such as the maximum allowed body size (default is 100kb). All the options are
// documented at https://github.com/expressjs/body-parser#bodyparserjsonoptions
bodyParserJsonOpts: {
limit: '256kb'
},
// (optional) queryStringParsingParameterLimit allows to
// override the default limit of 1000 parameters in query string parsing,
// documented at : https://github.com/ljharb/qs
queryStringParsingParameterLimit: 2000
});To run over HTTPS, set the protocol to https and configure the appropriate TLS settings
For example:
var fs = require("fs");
jsonApi.setConfig({
protocol: "https",
port: 16006,
tls: {
cert: fs.readFileSync('server.crt'),
key: fs.readFileSync('server.key')
passphrase: 'pass'
}
});or
var fs = require("fs");
jsonApi.setConfig({
protocol: "https",
port: 16006,
tls: {
pfx: fs.readFileSync('server.pfx'),
passphrase: 'pass'
}
});For a full set of tls options, see https://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener
jsonApi.onUncaughtException(function(request, error) {
// log the error somewhere
});// This function will be invoked on every request, as soon as the HTTP
// request has been parsed into a "request" object.
jsonApi.authenticate(function(request, callback) {
// If you callback with an error, the client will receive a HTTP 401 Unauthorised
if (request.headers.blockme) return callback("Fail");
// If you callback with no error, the request will continue onwards
return callback();
});Note: You should only start the server once you've called setConfig as per the example above. Resources can be defined before OR after the server has been started.
jsonApi.start();To gracefully shutdown the service, you can call .close(). This will inform all handlers that the server is shutting down, they'll have an opportunity to close any open files or connections, then the HTTP server will stop listening.
jsonApi.close();Whilst interfering with the routing layer of jsonapi-server is not recommended (any modifications you make will go against the specification) I can appreciate the needs of businesses and the need to get stuff done. There is therefore an accessor to enable a consumer of jsonapi-server to inject their own custom routes / middleware BEFORE the json:api routes and middleware are applied.
var app = jsonApi.getExpressServer();
app.use(someMiddleware);
jsonApi.start() // this line applies the json:api routing and starts the service