Provider for the Node modules that accesesthe DBC webservices
npm install dbc-node-serviceprovider



Abstraction layer for the DBC webservices. Handles the communication between
the application- and the service layer providing optional transforms for
transforming the data received from the services before returning it to the
client.
provider.registerTransform:Transform) ``javascript`
const Provider = require('dbc-node-serviceprovider');
const provider = Provider(config);
javascript
import Recommendations from 'dbc-node-recommendations';
provider.registerServiceClient({
name: 'recommend',
init(config) {
return Recommendations(config.endpoint);
}
});
`
$3
Method for registering transform classes. Transforms need events, requestTransform, responseTransform`javascript
provider.registerTransform({
event() {
return 'transformEvent';
},
requestTranform(request) {
// make a call to one or more services, using the callServiceClient method
return this.callServiceClient('moreinfo::method', request);
},
requestResponse(response) {
// do something with the reponse
return response;
}
});
`
#### Transform#callServiceClient:Promise
On a transform it is possible to make calls to registered clients in the following format`javascript
const promise = this.callServiceClient('client', 'method', params);
`
callServiceClient returns a promise that should be returned from the requestTransform$3
Triggers an event on the provider. If the event does not exists an error is thrown.
A transform with the corresponding event needs to be registered first. the trigger method returns a Promise
`javascript
const recommendations = Provider.trigger('recommend', {like: ['123123123']});
recommendations
.then((result) => {
console.log(result);
})
.catch((error) => {
console.log(error)
});
`$3
activates the bundled transforms and clients
`javascript
provider.boostrap();
`$3
Setup socket api
`javascript
const app = express();
const server = require('http').Server(app);
const socket = require('socket.io').listen(server);
provider.setupSockets(socket);
`Events
The provider inherits the Events API which is used to register events from the registered transforms$3
add an event object
`javascript
Events.add('type', 'eventName', Function||Object);
`$3
Retrieve a single event object
`javascript
const event = Events.get('type', 'eventName');
`$3
Returns a map of events of a specified type`javascript
const map = Events.getEventsOfType('type');
map.forEach((value, eventName) => console.log.bind(console));
`Bundled clients
* MoreInfo.client.js
* OpenSearch.client.js
* OpenSuggest.client.js
* PopSuggest.client.js
* Recommendations.client.jsBundled transforms
* CoverImage.transform.js
* ResultList.transform.js
* Work.transform.js
* OpenSuggest.transform.js
* PopSuggest.transform.js
* Recommendations.transform.jsAPI 2.0
$3
The provider needs to be initialized with a config file before usage. `javascript
const Provider = require('dbc-node-serviceprovider');
const provider = Provider(someLoggerNotRequired);
`$3
Method for registering serviceclients. Serviceclients need a name that refers to a config namespace, and an initialized client
`javascript
import Recommendations from 'dbc-node-recommendations';
const recommendations = Recommendations(config);
provider.registerServiceClient('recommend', recommendations);
`
$3
Method for registering transform classes. Transforms need events, requestTransform, responseTransform`javascript
provider.registerTransform({
event() {
return 'transformEvent';
},
requestTranform(request) {
// make a call to one or more services, using the callServiceClient method
return this.clients.recommend.getRecommendations(request);
},
requestResponse(response) {
// do something with the reponse
return response;
}
});
`
#### Transform#callServiceClient:Promise (DEPRICATED)
Call serviceClients through the clients object on the transform`javascript
const promise = this.clients.nameSpace.method(params);
`
Client calls always returns a promise that should be returned from the requestTransform$3
Triggers an event on the provider. If the event does not exists an error is thrown.
A transform with the corresponding event needs to be registered first. the trigger method returns a Promise
`javascript
const recommendations = Provider.trigger('recommend', {like: ['123123123']});
recommendations
.then((result) => {
console.log(result);
})
.catch((error) => {
console.log(error)
});
`$3
Setup socket api
`javascript
const app = express();
const server = require('http').Server(app);
const socket = require('socket.io').listen(server);
provider.dispatcher(socket);
`API 3.0
The new 3.0 api is almost identical to the 2.0 api, except it requires a socketcluster worker or something with an identical api.$3
`javascript module.exports.run = function (worker) {
const app = express();
const server = worker.httpServer;
const scServer = worker.getSCServer();
server.on('request', app);
...
provider.dispatcher(worker);
}
``