You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

183 lines
5.2 KiB

# node-eventstore-client
7 years ago
A port of the EventStore .Net ClientAPI to Node.js
## Learning
If you want to learn more about EventSourcing/CQRS/EventModeling, you can join the virtual workshop offered by my employer Adaptech Group, see info at [](
## Status
7 years ago
### Missing features:
- Set system settings
### Areas to improve
- Errors
- Use codes or types to differentiate between errors
- Performance
- Performance hasn't been tested yet
- Tests
- Can always do with more tests
## Getting started
7 years ago
Install using `npm install node-eventstore-client`
### Dependencies
- Node.js >= 4.0
- Modules: [long](, [protobufjs](, [uuid](, [strict-event-emitter-types]( (installed via `npm install`)
### Install and run an Eventstore on localhost
5 years ago
5 years ago
*Note: If you are using a version of EventStore prior to 3.9.4, you need to use version 0.1.x of this package `npm install node-eventstore-client@^0.1`.*
### API Documentation
#### Offline
The offline documentation can be found in the module folder `./node_modules/node-eventstore-client/docs`.
#### Online
The online documentation can be found at [](
5 years ago
### Example: Storing an event
6 years ago
Save to ```app.js:```
var esClient = require('node-eventstore-client');
var uuid = require('uuid');
var streamName = "testStream";
Connecting to a single node using "tcp://localhost:1113"
- to connect to a cluster via dns discovery use "discover://"
- to connect to a cluster via gossip seeds use
new esClient.GossipSeed({host: '', port: 2113}),
new esClient.GossipSeed({host: '', port: 2113}),
new esClient.GossipSeed({host: '', port: 2113})
var connSettings = {}; // Use defaults
var esConnection = esClient.createConnection(connSettings, "tcp://localhost:1113");
esConnection.once('connected', function (tcpEndPoint) {
console.log('Connected to eventstore at ' + + ":" + tcpEndPoint.port);
var eventId = uuid.v4();
var eventData = {
a : Math.random(),
b: uuid.v4()
var event = esClient.createJsonEventData(eventId, eventData, null, 'testEvent');
esConnection.appendToStream(streamName, esClient.expectedVersion.any, event)
.then(function(result) {
console.log("Stored event:", eventId);
console.log("Look for it at: http://localhost:2113/web/index.html#/streams/testStream");
.catch(function(err) {
6 years ago
6 years ago
npm install uuid
npm install node-eventstore-client
6 years ago
node app.js
### Example: Subscribing to events
```cd samples```
To subscribe to all events from now on (includes example of a filter which ignores events which we aren't interested in):
```node subscribe-all-events.js```
To catch up on all events ever and subscribe to all new ones from now on:
```node subscribe-catchup-all-events.js```
To generate a test event, open a separate console and run:
```node store-event.js```
## Running the tests
7 years ago
### Local testing
To run the tests it is recommended that you use an in-memory instance of the eventstore so you don't pollute your dev instance.
EventStore.ClusterNode.exe --run-projections=all --memdb –certificate-file=yourcert.pfx
./ --run-projections=all --memdb –certificate-file=yourcert.p12
You can also use docker-compose :
# start the single node cluster
npm run compose:single:start
# if you want to wait for the cluster to be available
npm run compose:wait
# run the tests
npm run test
# to cleanup (stop containres, delete volumes)
npm run compose:single:stop
For SSL setup see:
7 years ago
To execute the tests suites simply run
7 years ago
npm test
### Isolated environment
To be able to run the tests for different connection types (tcp, gossip, cluster) docker-compose files are available to setup the environment and run the tests.
#### Prerequisites
* docker
* docker-compose
#### Run
To execute the tests suites for single node cluster (tcp connection) simply run
npm run test:single
To execute the tests suites for multiple nodes cluster (gossip connection) simply run
npm run test:gossip
To execute the tests suites for multiple nodes cluster (dns discovery connection) simply run
npm run test:cluster
## Porting .Net Task to Node.js
Any async commands returns a [Promise]( object in replacement of .Net Task.
## License
Ported code is released under the MIT license, see [LICENSE](
Original code is released under the EventStore license and can be found at