Created
January 8, 2017 06:50
-
-
Save TonyPythoneer/c34d5381bcf02308359220d4df338054 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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