书接上文,贴一个完整的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/

最后修改日期: 2017年10月16日

作者