An open API service indexing awesome lists of open source software.

https://github.com/stroiman/bs-mongodb

Bucklescript bindings to node mongodb driver
https://github.com/stroiman/bs-mongodb

Last synced: 8 months ago
JSON representation

Bucklescript bindings to node mongodb driver

Awesome Lists containing this project

README

          

# MongoDB bindings for bucklescript

[![Build Status](https://travis-ci.org/PeteProgrammer/bs-mongodb.svg?branch=master)](https://travis-ci.org/PeteProgrammer/bs-mongodb)

This library contains preliminary bindings to MongoDB. There is very little
documentation yet, and far from all features are implemented.

This library is need-driven, I am adding bindings as I need them. If you add
bindings to this, feel free to send me a pull request.

## Future breaking change - be aware

When I first created the `Collection.createIndex` function, I needed to pass
options. But it didn't occur to me then, that the options should be optional. So
in a future version, the options will be passed as an optional argument.
Currently there is a `Collection.createIndexNoOpts` for a no-options call.

## Handling Async code

The mongo driver is inherently async, every result is either provided to a
callback, or delivered in a Promise. I personally use the callbacks with [my own
async handling library](https://github.com/PeteProgrammer/resync).

But I didn't want to push a specific async library upon any users of this
library, so in order to use the library, you construct the module through a
functor, that takes a `CallbackHandler` as argument.

This piece of code is from my project where I bind the mongo library to my async
library.

```
include MongoDB;

module AsyncHandler : CallbackHandler with type t('a) = Async.t('a) = {
type t('a) = Async.t('a);
let callbackConverter = (x:callback('a)) : Async.t('a) => x |> Async.from_js;
};

include Make(AsyncHandler);
```

If you prefer to use a `(Js.Result.t('a,MongoError.t) => unit) => unit`, you can
do so. I might get some examples up.

And I will try to see if I can get it to work with Promises, for those who
prefer this route (the underlying node library returns a promise, if no callback
is passed to the aync functions).