Library that contains common elements used in microservices
npm install @bluealba/microservices-toolkitLittle library with a few "common" functionality that we use in our microservices.
npm i @bluealba/microservices-toolkit
`Use Cases
$3
#### Pool
Pool is a wrapper on pg-pool that provides the possibility to query centralizing error handling
using retries and mapping responses
Pool provides:
* getPool: returns the pg-pool object for direct use.
* query: queries the database with the given statement and parameters logging any possible error before rethrowing the exception.
* recoverQuery: same as query but with retries (configured by maxQueryRetries).
* mappedQuery: same as recoverQuery but adding a mapping parameter that is used to map each value of the result set.
Code example
In order to create a connection pool you should use the following code.
`javascript
const config = ...;
const toolkit = require("@bluealba/microservices-toolkit");const pgPool = toolkit.buildPGClient(config);
`We use the config object to configure the pool expecting the following attributes.
`javascript
{
host: config.host,
database: config.dbName,
user: config.user,
password: config.password,
port: config.port,
max: config.maxPoolSize,
idleTimeoutMillis: config.idleTimeout,
connectionTimeoutMillis: config.dbTimeout,
maxUses: config.maxUses,
}
`Also, the configuration should have the following value to specify the amount of retries
`
maxQueryRetries
`$3
#### graphqlCustomErrorFn
Is a custom error handler for graphql that allows the user to provide errors with extensions that
Configure the custom error handling using:
`javascript
const toolkit = require("@bluealba/microservices-toolkit");const graphqlCustomErrorFn = toolkit.graphqlCustomErrorFn;
app.use(
"/graphql",
graphqlHTTP({
schema,
pretty: true,
graphiql: true,
customFormatErrorFn: graphqlCustomErrorFn(),
})
);
`Errors should be created adding an extension field like in this example:
`javascript
class StatusCodeError extends Error { constructor(statusCode, errorCode, message) {
super(message);
this.extensions = { errorCode: errorCode, statusCode: statusCode, message: message };
}
}
`$3
#### errorHandler
Simple error handler for express that catches any loose error and turns it into a well-formed JSON error with a 500 status code.
`javascriptconst toolkit = require("@bluealba/microservices-toolkit");
const errorHandler = toolkit.errorHandler;
app.use(errorHandler(logger));
`
#### gatewayAuthFilter that adds an auth object to the request using the x-forwarded-user-* headers added by the proxy
this object provides:
* username:
* displayName:
* operations:
* can: method that check if the user has the given operation
* matchesLoggedUser: checks if the parameter is the username
Code example
`javascriptconst toolkit = require("@bluealba/microservices-toolkit");
const gatewayAuth = toolkit.gatewayAuth;
app.use(gatewayAuth());
`#### getAuthHeaders
`javascriptconst toolkit = require("@bluealba/microservices-toolkit");
const getAuthHeaders = toolkit.getAuthHeaders;
const authHeaders = getAuthHeaders(req);
`$3
#### runwraps any give call with a method that logs the time the method takes to run when called
`javascriptconst toolkit = require("@bluealba/microservices-toolkit");
const run = toolkit.run;
module.exports = run(getSegments, "getSegments");
`$3
Util class that provides methods to generate sql parts.
* formatDate,
* escapeQuotes,
* wrapInQuotes,
* wrapInDoublesQuotes,
* generateAnyClause,
* generateInClause,
Code example
`javascriptconst toolkit = require("@bluealba/microservices-toolkit");
const { generateAnyClause } = toolkit.sqlUtils;
``