Skip to content

Instantly share code, notes, and snippets.

@TonyPythoneer
Created January 8, 2017 06:50
Show Gist options
  • Save TonyPythoneer/c34d5381bcf02308359220d4df338054 to your computer and use it in GitHub Desktop.
Save TonyPythoneer/c34d5381bcf02308359220d4df338054 to your computer and use it in GitHub Desktop.
import * as http from 'http';
import { MongoClient, Db, Collection } from 'mongodb';
import { Observable, Observer } from 'rxjs';
const URI = '';
const getDb = (uri: string) => {
console.log('Connect!!!!');
let connect = Observable.bindNodeCallback<Db>(MongoClient.connect);
return connect(uri);
};
let mdb: Db;
const connect = (uri: string) => {
if (mdb) {
console.time('cache connect!');
let obs = Observable.create(observer => { observer.next(mdb); });
console.timeEnd('cache connect!');
return obs;
}
console.time('create connect!');
let obs = Observable.create(observer => {
MongoClient.connect(uri, (err, db) => {
if (err) return observer.error(err);
mdb = db;
return observer.next(db);
});
}) as Observable<Db>;
console.timeEnd('create connect!');
return obs;
};
let collll: Collection;
const createCollection = (database: Observable<Db>, collectionName: string) => {
/*
if (collll) {
console.time('Cache Collection!!!!');
let obs = Observable.create(observer => { observer.next(collll); });
console.timeEnd('Cache Collection!!!!');
return obs;
}
*/
console.time('Create Collection!!!!');
let obs = database.flatMap(db => {
return Observable.create((observer: Observer<Collection>) => {
let col = db.collection(collectionName);
collll = col;
observer.next(col);
}) as Observable<Collection>;
});
console.timeEnd('Create Collection!!!!');
return obs;
};
const server = http.createServer((req, res) => {
console.log('before');
const db = connect(URI);
const user = createCollection(db, 'user');
user.subscribe(async function (col) {
let username = 'fuck123';
let result = await col.insertOne({ username });
console.log("insert!");
console.log(result.result.ok);
});
user.subscribe(async function (col) {
let username = 'fuck123';
let result = await col.findOne({ username });
console.log("findone!");
console.log(result);
});
console.log('after');
});
server.listen(3000);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment