书接上文,贴一个完整的HTTP实现,草书,只是为了说明问题,测试一下,不能用来做项目。
依赖两个,前文已经说明。直接通过NodeHTTP实现Mongodb的增删改查
import * as http from 'http'; import * as mongodb from 'mongodb'; class NodeServer001 { server:any; port:number; //Mongodb连接字串 url:string = 'mongodb://USERNAME:PASSWORD@HOST/DBNAME?authMechanism=SCRAM-SHA-1'; //构造函数,输入一个端口号用于监听。 constructor(inPort:number){ this.port = inPort; } //启动 run() { this.server = http.createServer(this.requestHandler) this.server.listen(this.port, (err) => { if (err) { return console.log('something bad happened', err) } console.log(`server is listening on ${this.port}`); }) } //请求处理方式 requestHandler = (request, response) => { console.log(request.url); if(request.url == "/GetInfo"){ this.doResponse1(response); }else if(request.url == '/SetInfo'){ this.doResponse3(response); }else if(request.url == '/DropInfo'){ this.doResponse4(response); }else if(request.url == '/'){ this.doResponse2(response); } } //获取数据 //http://localhost:1070/GetInfo doResponse1(response){ let mMongoClient = mongodb.MongoClient; mMongoClient.connect(this.url, function(err, db) { if(err) { console.log('Error:'+ err); return } let col= db.collection('DemoInfo'); // 获得collection的句柄 // col.find().limit(20).toArray(function(err, result) { col.find().skip(1000).limit(20).toArray(function(err, result) { if(err) { console.log('Error:'+ err); return } var myJsonString = JSON.stringify(result); console.log(myJsonString); response.end(myJsonString) //console.log(result); }); db.close(); }); } //根目录 //http://localhost:1070 doResponse2(response){ response.end('Hello Node.js Server DoResponse2!') } //追加数据 //http://localhost:1070/SetInfo doResponse3(response){ let mMongoClient = mongodb.MongoClient; mMongoClient.connect(this.url, function(err, db) { if(err) { console.log('Error:'+ err); return } let col= db.collection('DemoInfo'); // 获得collection的句柄 col.insertOne({"title":"MongoDBDemo","description":"JustForTest","likes":1000,"by":"Demo"}); col.find({"title":"MongoDBDemo"}).limit(20).toArray(function(err, result) { if(err) { console.log('Error:'+ err); return } var myJsonString = JSON.stringify(result); response.end(myJsonString) }); db.close(); }); } //删除目录 //http://localhost:1070/DropInfo doResponse4(response){ let mMongoClient = mongodb.MongoClient; mMongoClient.connect(this.url, function(err, db) { if(err) { console.log('Error:'+ err); return } let col= db.collection('DemoInfo'); // 获得collection的句柄 col.deleteMany({"title":"MongoDBDemo"}); col.find({"title":"MongoDBDemo"}).limit(20).toArray(function(err, result) { if(err) { console.log('Error:'+ err); return } var myJsonString = JSON.stringify(result); response.end(myJsonString) }); db.close(); }); } } let mNodeServer001 = new NodeServer001(1070); mNodeServer001.run();
tsc编译,然后Node XXX.js执行,看看
http://localhost:1070/
http://localhost:1070/GetInfo
http://localhost:1070/SetInfo
http://localhost:1070/DropInfo
这些是不是能够在浏览器中正常运行…..
当然,这个只是一个简单的服务端例子,比如没有Root目录,访问静态资源该如何处理,Cookie等等也不支持。了解NodeJS的知道有个Express轻量级服务器,真实的运用一般应该使用Express,但是Express的TypeScript框架有很多。。。为了方便说明。我这里面只用了这个最最最简单的Http。对于测试用的写死的服务端API,勉强够吧。。。窃以为
关于Mongodb不在本片的范围内,如果要了解可以参看他们的在线手册,我也不熟,很简单,用到再去查也可。
// https://docs.mongodb.com/v3.0/reference/method/db.collection.find/