Nondeterministic Polynomial Munchies

    iotjs-express

    0.0.22 • Public • Published

    IOTJS-EXPRESS

    GitHub forks license Build Status NPM JsDelivr IRC Channel Docker Pulls Automated Builds Build Status codebeat badge Codacy Badge CII Best Practices Fediverse

    NPM

    INTRODUCTION

    While ExpressJs claims to be minimalist, many dependencies are required and thus can't support IoT.js runtime (powered by JerryScript an alternative engine for MicroControllers).

    Instead of porting the whole project to older ECMA standards, basic routing was re-implemented, and API tried to be preserved.

    Originally this module was done for "webthing-iotjs" project, a library to build webthings to connect to WebThingsIo gateway.

    Source file was bundled into project, but then pulled out as this standalone module, which can be used by both runtime Node.Js and IoT.js.

    Presentation

    USAGE WITH IOTJS

    mkdir iotjs_modules
    git clone https://github.com/rzr/iotjs-express iotjs_modules/iotjs-express
    cd iotjs_modules/iotjs-express
    make start &
    #| iotjs example 
     
    curl -i http://localhost:8080/.well-known/security.txt
    #| HTTP/1.1 200 OK 
    #| access-control-allow-origin: * 
    #| access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept 
    #| access-control-allow-methods: GET, HEAD, PUT, POST, DELETE 
    #| 
    #| Contact: https://www.npmjs.com/~rzr 
     
    curl -i http://localhost:8080/favicon.ico
    #| HTTP/1.1 404 Not Found 
    #| content-length: 23 
    #| Error: 404 (Not Found) 
     
    curl -i http://localhost:8080/~rzr
    #| {"user":"rzr"} 
     
    curl -X PUT -d '{"value":42}' http://localhost:8080/db/some-key
    #| {"some-key":42} 
     
    curl -X PUT -d '{"value":1984}' http://localhost:8080/db/some-other-key
    #| {"some-key":42,"some-other-key":1984} 
     
    curl -i  http://localhost:8080/static/README.md
    #| HTTP/1.1 200 OK 
    #| # IOTJS-EXPRESS # 
    #| (...) 

    iotjs_modules

    USAGE WITH NODE

    It's mostly the same:

    npm install iotjs_express
    cd node_modules/iotjs-express
    npm start
    # Or: 
    make start runtime=node
    #| node example 

    USAGE WITH DOCKER

    docker run --net host rzrfreefr/iotjs-express:latest
    curl http://localhost:8080/.well-known/security.txt
    #| Contact: https://www.npmjs.com/~rzr 
     
    # Or from sources 
    docker-compose up
    curl http://localhost:8080/.well-known/security.txt
    #| Contact: https://www.npmjs.com/~rzr 

    USAGE WITH MINIKUBE

     
    name="iotjs-express"
    url="https://raw.githubusercontent.com/rzr/iotjs-express/master/extra/tools/kube/$name.yml"
    url=https://raw.githubusercontent.com/rzr/iotjs-express/sandbox/rzr/devel/master/extra/tools/kube/$name.yml
    kubectl=kubectl
     
    minikube version
     
    minikube start || minikube logs --alsologtostderr
     
    $kubectl version
     
    $kubectl apply -f "${url}"
    #| deployment.extensions/iotjs-express created 
    #| service/iotjs-express created 
     
    time minikube service ${name} --url
    #http://192.168.99.102:30080 
    time minikube service ${name}
    #| 🎉  Opening kubernetes service default/iotjs-express in default browser... 

    USAGE WITH K3S

    project="iotjs-express"
    image="rzrfreefr/${project}:latest"
    kubectl="sudo kubectl"
     
    sudo sync
    sudo snap remove microk8s
    curl -sfL https://get.k3s.io | sh - # v0.7.0 
    sudo systemctl restart k3s.service || sudo systemctl status k3s.service
     
    $kubectl get nodes # Wait "Ready state" 
    #| {host}   NotReady   master   5s    v1.14.4-k3s.1 
    #| (...) 
    #| {host}   Ready    master   51s   v1.14.4-k3s.1 
     
    $kubectl run "${project}" --image="${image}"
     
    $kubectl get all --all-namespaces | grep "$project"
    #| default       pod/iotjs-express-...-...   1/1     Running     0          ..s 
     
    pod=$($kubectl get all --all-namespaces \
      | grep -o "pod/${project}.*" | cut -d/ -f2 | awk '{ print $1}' \
      || echo failure) && echo pod="$pod"
    $kubectl describe pod "$pod"  | grep 'Status:             Running'
    ip=$($kubectl describe pod "$pod" | grep 'IP:' | awk '{ print $2 }') && echo "ip=${ip}"
     
    curl http://$ip:8080/.well-known/security.txt

    DEMO

    In "webthing-iotjs-20180621rzr" video, Edison's running a webthing server powered by iotjs-express framework to build routes, (it relies on IoT.js's http module, API is aligned to node)

    webthing-iotjs-20180621rzr

    Demo also shows following systems:

    • Edison: iotjs-express + webthing-iotjs on Jubilinux (Debian fork).
    • RaspberryPi: webthings-gateway + express.js on Raspbian
    • Galaxy note: SamsungInternet web browser for Android.

    EXTRA EXAMPLES

    iotjs example/client.js 8080 localhost /.well-known/security.txt
    Contact: https://www.npmjs.com/~rzr

    An extra example is added to show how to make a bridge from HTTP/REST to MQTT.

    RESOURCES

    Install

    npm i iotjs-express

    DownloadsWeekly Downloads

    6

    Version

    0.0.22

    License

    MIT

    Unpacked Size

    92.7 kB

    Total Files

    53

    Last publish

    Collaborators

    • rzr