zoukankan      html  css  js  c++  java
  • node-mongo-服务器封装

    分为三个文件
    mongo.js基本的封装了下mongo数据库操作
    workmongo.js 里面有路由和解析操作(可以根据具体业务进行扩充)
    mainmongo.js 服务器相关
    
    调用例子:
    
    查询数据
    http://127.0.0.1:2323/get?k=q&n=data&c=wck&w={"y":"y"}
    添加数据
    http://127.0.0.1:2323/post?k=i&n=data&c=wck 具体的内容,在post的body里面,采用标准json格式就好
    
    ----------------------------------------------------
    mongo.js
    const { MongoClient, ObjectId } = require('mongodb');
    const mongourl = "mongodb://localhost:27017/";
    
    const findMongo = (dbname, collection, where, req, res) => {
        MongoClient.connect(mongourl, { useNewUrlParser: true, useUnifiedTopology: true }, function (err, client) {
            if (err) throw err;
            const db = client.db(dbname);
            db.collection(collection).find(where).sort({ uptime: -1 }).toArray(function (err, datas) {
                if (err) throw err;
                res.writeHead(200, { "Content-Type": "text/plain; charset=utf8" });
                res.end(JSON.stringify(datas));
                //client.close();
            });
        });
        return;
    }
    
    const insertMongo = async (dbname, collection, newdatas, req, res) => {
    
        MongoClient.connect(mongourl, { useNewUrlParser: true, useUnifiedTopology: true }, function (err, client) {
            if (err) throw err;
            const db = client.db(dbname);
            db.collection(collection).insertMany(newdatas, function (err, datas) {
                if (err) throw err;
                res.writeHead(200, { "Content-Type": "text/plain; charset=utf8" });
                res.end(JSON.stringify(datas));
                //client.close();
            });
        });
        return;
    }
    
    module.exports = {
        findMongo,
        insertMongo
    };
    
    
    
    
    ----------------------------------------------------
    workmongo.js
    const url = require('url');
    const mongo = require('./mongo');
    const querystring = require('querystring');
    
    //get 获取数据/查询
    const work_get = async (req, res) => {
        const params = url.parse(req.url, true).query;
        try {
            switch (params.k) {
                case 'q': {
                    if (params.n && params.c) {
                        //基本查询 条件里不能加 ObjectId 如果需要的话可以单独写
                        //dbname collection where
                        //http://127.0.0.1:2323/get?k=q&n=data&c=wck&w={"y":"y"}
                        mongo.findMongo(params.n, params.c, JSON.parse(params.w), req, res);
                    }
                } break;
                default: {
                    res.writeHead(200, { "Content-Type": "text/plain; charset=utf8" });
                    res.write("Wow");
                    res.end();
                }; break;
            }
        } catch (e) {
            datas = null;
        }
    }
    
    //post 创建数据
    const work_post = async (req, res) => {
        const params = url.parse(req.url, true).query;
        let postdata = '';
        req.on('data', function (chunk) {
            postdata += chunk;
        });
        req.on('end', async function () {
            postdataobj = querystring.parse(postdata);
            try {
                switch (params.k) {
                    case 'i': {
                        if (params.n && params.c) {
                            //插入一条数据
                            //dbname collection where
                            //http://127.0.0.1:2323/post?k=i&n=data&c=wck 具体的内容,在post的body里面,采用标准json格式就好
                            const postdataobjarr = [postdataobj];
                            mongo.insertMongo(params.n, params.c, postdataobjarr, req, res);
                        }
                    } break;
                    default:{
                        res.writeHead(200, { "Content-Type": "text/plain; charset=utf8" });
                        res.write("Wow");
                        res.end();
                    }; break;
                }
            } catch (e) {
                datas = null;
            }
        });
    }
    
    //其他的各种增删改查 就按照上面的思路 再结合具体业务场景 慢慢写就好。
    //建议 表转化 查询用 get 增加用 post 更改用 put 删除的话随意把。
    //注意url的最大长度问题。
    
    module.exports = {
        work_get,
        work_post
    };
    
    
    ----------------------------------------------------
    mainmongo.js
    const http = require('http');
    var url = require("url");
    const workmongo = require('./workmongo');
    
    const route = async (req, res) => {
        //console.log("url.pathname:" + url.parse(req.url).pathname);
        switch (url.parse(req.url).pathname) {
            case "/get": {
                workmongo.work_get(req, res);
            }; break;
            case "/post": {
                workmongo.work_post(req, res);
            }; break;
            default: {
                res.end();
            } break;
        }
    }
    
    const main = async () => {
        http.createServer(function (req, res) {
            route(req, res);
    
        }).listen(2323);
    };
    
    main();
    
    
    
    
    
    
  • 相关阅读:
    NOIP2011 D1T1 铺地毯
    NOIP2013 D1T3 货车运输 倍增LCA OR 并查集按秩合并
    POJ 2513 trie树+并查集判断无向图的欧拉路
    599. Minimum Index Sum of Two Lists
    594. Longest Harmonious Subsequence
    575. Distribute Candies
    554. Brick Wall
    535. Encode and Decode TinyURL(rand and srand)
    525. Contiguous Array
    500. Keyboard Row
  • 原文地址:https://www.cnblogs.com/csnd/p/12061851.html
Copyright © 2011-2022 走看看