npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

coap-router-full

v1.1.1

Published

A quick demo on how to leverage web router to build CoAP server.

Downloads

19

Readme

coap-router-full npm version

A quick demo on how to leverage web router to build CoAP (Constrained Application Protocol) server.

Reference the source code

Github

1. Motivation

Currently I'm working on a Node.js based IoT (Internet of Things) platform. It allows Node.js powered DTU (Data Transfer Unit) to serve as CoAP server on smart devices like Raspberry PI.

When you design a Node.js based HTTP server, web router is one of your best choices to manage incoming requests from clients. Unfortunately, CoAP doesn't have one like Express Router, this project is to demonstrate how to leverage web router concept to simplify CoAP server implementation.

2.Usage

Inspired by many other JavaScript routers, coap-router does almost the same recursive routing as Express.Router.

Let's take a look at the example.

Example

./server.js
const coap = require("coap");
const app = require("./app");

const coapTiming = {
    ackTimeout: 0.25,
    ackRandomFactor: 1.0,
    maxRetransmit: 3,
    maxLatency: 2,
    piggybackReplyMs: 10
}
coap.updateTiming(coapTiming)
const server = coap.createServer(app);
var PORT = 5683
server.listen(PORT, () => {
    console.log(`The CoAP server is now running port ${PORT}.\n` + app.help);
});
./app.js
const Router = require("coap-router-full");
const app = Router();

app.help = `URL: coap://127.0.0.1:5683/
Usage:
 GET  / - Display this help document.
 GET  /test --- Test api get.
 POST /test --- Test api post.
 GET  /test/abc?de=fg --- Test api get with query string.
 POST /test/abc?de=fg -p "{'temp':100}" --- Test api post with query string and payload.`

app.code404 = 404
app.error404 = { msg: 'Not Found API' }

app.get("/", (req, res) => {
    res.status(200).end("Hello, world");
});

app.use("/test", require("./routes/test"));

module.exports = app;
./routes/test.js
const Router = require("coap-router-full");
const router = Router();

function Middleware(req, res, next) {
    console.log("Middleware.")
    next()
}

router.get("/", Middleware, (req, res) => {
    console.log("[ payload ]",req.payload)
    console.log("[ query ]",req.query)
    console.log("[ params ]",req.params)
    console.log("\n")

    res.status(200).json({ test: "test api get." });
});

router.post("/", (req, res) => {
    console.log("[ payload ]",req.payload)
    console.log("[ query ]",req.query)
    console.log("[ params ]",req.params)
    console.log("\n")

    res.status(200).json({ test: "test api post." });
});

router.post("/echo", (req, res) => {
    console.log("[ payload ]",req.payload)
    console.log("[ query ]",req.query)
    console.log("[ params ]",req.params)
    console.log("\n")

    let resp = { ...JSON.parse(req.payload) ,timestamp: new Date().getTime() }
    res.status(200).json(resp);
});

router.get("/:testparams", (req, res) => {
    console.log("[ payload ]",req.payload)
    console.log("[ query ]",req.query)
    console.log("[ params ]",req.params)
    console.log("\n")

    let resp = { timestamp: new Date().getTime() }
    res.status(200).json(resp);
});

router.post("/:testparams", (req, res) => {
    console.log("[ payload ]",req.payload)
    console.log("[ query ]",req.query)
    console.log("[ params ]",req.params)
    console.log("\n")

    let resp = { timestamp: new Date().getTime() }
    res.status(200).json(resp);
});

module.exports = router;

3. How to Install

3.1 Basic Requirements

  • Node.js 6 or above
  • UDP compatible network connected

3.2 Installation

$ npm install

or

$ npm i coap
$ npm i coap-router-full

4. How to Test

4.1 Install CoAP Client

Although there're dozens of CoAP clients available, one of the easiest ways is to install Node.js based client named coap-cli.

$ npm install coap-cli -g
$ coap

4.2 Tests

  1. Start example server. By default the CoAP server is listening at port 5683.

    $ npm start
  2. Get literal resource.

    $ coap get "coap://127.0.0.1:5683/"
  3. TEST API.

    $ coap get "coap://127.0.0.1:5683/test"
    $ coap post "coap://127.0.0.1:5683/test"
    $ coap get "coap://127.0.0.1:5683/test/abc?de=fg"
    $ coap post "coap://127.0.0.1:5683/test/abc?de=fg" -p "{'temp':100}"
    $ coap post "coap://localhost/test/echo" -p "{'abc':123}"