Natural Preference for Minification
    Wondering what’s next for npm?Check out our public roadmap! »

    urest

    5.0.3 • Public • Published

    logo

    Lightweight, fast, zero dependency restful routing framework inspired by express and restify.

    Install

    $ npm install urest

    Basic App

    const { Rest, JsonBodyParser } = require("urest");
    const app = new Rest();
     
    app.pre(JsonBodyParser.middleware());
    app.get('/', (req, res) => res.send({message: 'Hello World'}));
    app.post("/echo", (req, res) => res.send(req.body));

    Native HTTP server

    app.native().listen(8000);

    AWS Lambda

    exports.handle = (e, context) => app.lambda(e, context);

    Google Cloud Functions

    module.exports = app.gcf();

    UErrors

    Errors passed into the next function will be logged, then returned to the client obscured behind a unique ID.

    const { UErrors } = require("urest");
    const { UInternalServerError } = UErrors;
     
    app.get("/broken", (req, res, next) => next(new UInternalServerError("This is logged")));
     

    Response

    // 500
    {
        "code":"InternalServer",
        "eid":"3ccf6fadf79875f58631a8c7ecc302523b563423"
    }

    Log

    {
        "level":500,
        "request_id":"1a376e5eb266511a35aefcc7ffad7d50aef5df40",
        "environment":"develop",
        "service": "my-service",
        "stack":"UInternalServerError: This is logged\n    at Object.UError (urest/library/UErrors.js:7:8)\n    at new <anonymous> (urest/library/UErrors.js:11:9)\n    at runHandler (urest/library/Rest.js:79:22)\n    at next (urest/library/Rest.js:87:4)\n    at IncomingMessage.req.on.on (urest/library/JsonBodyParser.js:26:6)\n    at emitNone (events.js:106:13)\n    at IncomingMessage.emit (events.js:208:7)\n    at endReadableNT (_stream_readable.js:1056:12)\n    at _combinedTickCallback (internal/process/next_tick.js:138:11)\n    at process._tickCallback (internal/process/next_tick.js:180:9)",
        "message":"This is logged",
        "eid":"3ccf6fadf79875f58631a8c7ecc302523b563423",
        "code":"InternalServer",
        "statusCode":500
    }

    Interceptors

    Interceptors works in much the same way as middleware but act on the response before it is returned to the client.

    GZIP Interceptor

    The following example will check for the header "accept-encoding": "gzip" and will compress response bodies as fit.

    const { Rest, JsonBodyParser } = require("urest");
    const { Neutron } = require("urequest");
    const app = new Rest();
     
    app.int(Neutron.intercept());
     
    app.pre(JsonBodyParser.middleware());
    app.post("/echo", (req, res) => res.send(req.body));
    const server = app.native().listen(1234);

    Custom Interceptors

    The value passed into res.send is attached as res.responseData, the following example checks for a property in the response and prevents the request if not true.

    const { Rest, UErrors } = require("urest");
    const { UUnauthorizedError } = UErrors;
     
    const app = new Rest();
    app.int((req, res, next) => {
       if (res.responseData.authed !== true) next(new UUnauthorizedError());
       else next();
    });

    Install

    npm i urest

    DownloadsWeekly Downloads

    6

    Version

    5.0.3

    License

    MIT

    Unpacked Size

    33.3 kB

    Total Files

    16

    Last publish

    Collaborators

    • avatar