November: Procrastination Month

    w-comor-hapi

    1.0.31 • Public • Published

    w-comor-hapi

    A http communicator in nodejs and browser. Mapping functions from nodejs to other end points, like a simple RPC.

    language npm version license gzip file size npm download jsdelivr download

    Documentation

    To view documentation or get support, visit docs.

    Parts

    w-comor-hapi includes 2 parts:

    • w-comor-hapi-server: for nodejs server
    • w-comor-hapi-client: for nodejs or browser client

    Installation

    Using npm(ES6 module):

    Note: w-comor-hapi-server is mainly dependent on @hapi/hapi.

    Note: w-comor-hapi-client is mainly dependent on axios.

    npm i w-comor-hapi
    

    Example for w-comor-hapi-server:

    Link: [dev source code]

    import WComorHapiServer from 'w-comor-hapi/dist/w-comor-hapi-server.umd.js'
    
    function random(min, max) {
        return Math.floor(Math.random() * max) + min
    }
    
    let opt = {
        port: 8080,
        apiName: 'api',
        authenticate: function(token) { 
            //authenticate user by token
            return new Promise(function(resolve, reject) {
                setTimeout(function() {
                    resolve(true)
                }, 1000)
            })
        },
        filterFuncs: function(token, funcs) {
            //resolve funcs by authenticating user
            return new Promise(function(resolve, reject) {
                funcs = funcs.filter(function(v) {
                    return v.indexOf('Hide') < 0
                })
                resolve(funcs)
            })
        },
        onClientChange: function(clients, opt) {
            console.log(`Server[port:${opt.port}] now clients: ${clients.length}`)
        },
        funcs: {
            'group.plus': function({ p1, p2 }) {
                return new Promise(function(resolve, reject) {
                    setTimeout(function() {
                        resolve(p1 * p2)
                    }, random(100, 3000))
                })
            },
            'group.div': function({ p1, p2 }) {
                return new Promise(function(resolve, reject) {
                    setTimeout(function() {
                        resolve(p1 / p2)
                    }, random(100, 3000))
                })
            },
            'add': function({ p1, p2 }) {
                return new Promise(function(resolve, reject) {
                    setTimeout(function() {
                        resolve(p1 + p2)
                    }, random(100, 3000))
                })
            },
            'addHide': function({ p1, p2 }) {
                return new Promise(function(resolve, reject) {
                    setTimeout(function() {
                        resolve(p1 + p2)
                    }, random(100, 3000))
                })
            },
            'minu': function({ p1, p2 }) {
                return new Promise(function(resolve, reject) {
                    setTimeout(function() {
                        resolve(p1 - p2)
                    }, random(100, 3000))
                })
            },
        },
        routes: [
            {
                method: 'GET',
                path: '/code',
                handler: function (req, res) {
                    //console.log(req)
                    return 'get code query: ' + JSON.stringify(req.query)
                    //http://localhost:8080/code?a=1&bb=23.45
                    // => get code query: {"a":"1","bb":"23.45"}
                }
            },
        ],
    }
    
    new WComorHapiServer(opt)
    

    Example for w-comor-hapi-client:

    Link: [dev source code]

    import WComorHapiClient from 'w-comor-hapi/dist/w-comor-hapi-client.umd.js'
    
    //opt
    let opt = {
        url: 'http://localhost:8080/api',
        token: '*',
        error: function(err) {
            console.log('client nodejs: error:', err)
        },
        reconn: function() {
            console.log('client nodejs: reconn')
        },
    }
    
    //WComorHapiClient
    new WComorHapiClient(opt)
        .then(function(wo) {
            console.log('client nodejs: funcs: ', wo)
            
            function core(ps) {
                wo.group.plus(ps)
                    .then(function(r) {
                        console.log('client nodejs: plus(' + JSON.stringify(ps) + ')=' + r)
                    })
                    .catch(function(err) {
                        console.log('client nodejs: plus: catch: ', err)
                    })
                wo.group.div(ps)
                    .then(function(r) {
                        console.log('client nodejs: div(' + JSON.stringify(ps) + ')=' + r)
                    })
                    .catch(function(err) {
                        console.log('client nodejs: div: catch: ', err)
                    })
                wo.add(ps)
                    .then(function(r) {
                        console.log('client nodejs: add(' + JSON.stringify(ps) + ')=' + r)
                    })
                    .catch(function(err) {
                        console.log('client nodejs: add: catch: ', err)
                    })
                wo.minu(ps)
                    .then(function(r) {
                        console.log('client nodejs: minu(' + JSON.stringify(ps) + ')=' + r)
                    })
                    .catch(function(err) {
                        console.log('client nodejs: minu: catch: ', err)
                    })
            }
    
            let i = 100
            setInterval(function() {
                i += 1
                core({
                    p1: i,
                    p2: 10,
                })
            }, 1000)
    
        })
        .catch(function(err) {
            console.log('client nodejs: catch: ', err)
        })
    

    In a browser(UMD module):

    Note: w-comor-hapi-client is mainly dependent on axios.

    [Optional] Add script with nomodule for IE11.

    <script nomodule src="https://cdn.jsdelivr.net/npm/@babel/polyfill/dist/polyfill.min.js"></script>
    

    [Necessary] Add script for axios.

    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    

    [Necessary] Add script for w-comor-hapi-client.

    <script src="https://cdn.jsdelivr.net/npm/w-comor-hapi@1.0.31/dist/w-comor-hapi-client.umd.js"></script>
    

    Example for w-comor-hapi-client:

    Link: [dev source code]

    //opt
    let opt = {
        url: 'http://localhost:8080/api',
        token: '*',
        error: function(err) {
            console.log('client web: error:', err)
        },
        reconn: function() {
            console.log('client web: reconn')
        },
    }
    
    //WComorHapiClient
    let WComorHapiClient = window['w-comor-hapi-client']
    new WComorHapiClient(opt)
        .then(function(wo) {
            console.log('client web: funcs: ', wo)
            
            function core(ps) {
                wo.group.plus(ps)
                    .then(function(r) {
                        console.log('client web: plus(' + JSON.stringify(ps) + ')=' + r)
                    })
                    .catch(function(err) {
                        console.log('client web: plus: catch: ', err)
                    })
                wo.group.div(ps)
                    .then(function(r) {
                        console.log('client web: div(' + JSON.stringify(ps) + ')=' + r)
                    })
                    .catch(function(err) {
                        console.log('client web: div: catch: ', err)
                    })
                wo.add(ps)
                    .then(function(r) {
                        console.log('client web: add('+JSON.stringify(ps)+')='+r)
                    })
                    .catch(function(err) {
                        console.log('client web: add: catch: ', err)
                    })
                wo.minu(ps)
                    .then(function(r) {
                        console.log('client web: minu('+JSON.stringify(ps)+')='+r)
                    })
                    .catch(function(err) {
                        console.log('client web: minu: catch: ', err)
                    })
            }
    
            let i = 100
            setInterval(function() {
                i += 1
                core({
                    p1: i,
                    p2: 10,
                })
            }, 1000)
    
        })
        .catch(function(err) {
            console.log('client web: catch: ', err)
        })
    

    Install

    npm i w-comor-hapi

    DownloadsWeekly Downloads

    12

    Version

    1.0.31

    License

    MIT

    Unpacked Size

    1.4 MB

    Total Files

    56

    Last publish

    Collaborators

    • semisphere