sauromjs

1.0.3 • Public • Published

Messaging communicator for NodeJs microservice

npm install sauromjs

API

Import package

    const Saurom = require('sauromjs');

Request

Creating a request object

    const request = new Saurom.Request({
        instanceId: 'id1',            // Default: auto generate an uniq id. Each nodejs instance must have an uniq instance id, 
        mqUrl: 'amqp://localhost',    // Default 'amqp://localhost'
        timeout: 2000,                // Default 5000. Request timeout
    });

Connect to message queue

    request.connect()
        .then()
        .catch();

Call a repository's service

    request.call(repositoryName: string, serviceName: string, body: Object);

Example

    const request = new Saurom.Request();
    
    request
        .connect()
        .then(() => {
            request
                .call(
                    'MathRepository',
                    'sqrt',
                    {
                        number: 36,
                    }
                )
                .then((response) => {})
                .catch((error) => {});
        });

Service

Creating a service object

    const service = new Saurom.Service({
        repository: 'MathRepository',   // required
        instanceId: 'id2',              // default: auto generate an uniq id
        mqUrl: 'amqp://localhost',      // default 'amqp://localhost'. Queue url, using amqplib package to connect message queue. Please see http://www.squaremobius.net/amqp.node/channel_api.html#connect for detail           
    });

Connect to message queue

    service.connect()
        .then()
        .catch();

Define service

    service.register(serviceName: string, function(req, res) {
        // req: object - body was sent by request object
        // res: object
        //     - res.success(anyValue) : Send success response
        //     - res.error(Error object): Send error response
    });

Example

    const service = new Saurom.Service({
        repository: 'MathRepository', // required
    });
    
    service.register('sqrt', (req, res) => {
        const { number } = req;
 
        if (typeof number !== 'number') {
            res.error(new Error('Not a number'));
            return;
        }
 
        res.success(Math.sqrt(number));
    });
            
    service.connect();

Example

See more example at: https://github.com/nhuanhoangduc/sauromjs/tree/master/test

1. Request.js - Make request to UserRepository microservice

// --- Step 1: Import sauromjs package
const Saurom = require('sauromjs');
 
 
// --- Step 2: Create a Request object
const Request = new Saurom.Request();
 
 
// --- Step 3: connect to message queue
Request.connect()
    .then(async () => { // Connected
    
        // --- Step 4: Make request to repository with given service name and params
         
        try {
            // Call service 'sqrt' of MathRepository
            const sqrt = await Request.call(
                'MathRepository',
                'sqrt',
                {
                    number: 36,
                }
            );
 
            // Call service 'pow' of MathRepository
            const pow = await Request.call(
                'MathRepository',
                'pow',
                {
                    baseNumber: 6,
                    exponent: 2
                }
            );
 
            console.log(sqrt); // 6
            console.log(pow); // 36
        } catch (error) {
            console.log(error);    
        }
    })
    .catch((err) => {
        console.log(err);
    });

2. MathRepository.js - Receive request message and send response message

// --- Step 1: Import sauromjs package
const Saurom = require('sauromjs');
 
 
// --- Step 2: Create a Service object
const Service = new Saurom.Service({
    repository: 'MathRepository', // required
});
 
 
// --- Step 3: Define services for repository MathRepository
        
// Service 'sqrt' of repository MathRepository
Service.register('sqrt', (req, res) => {
    const { number } = req;
 
    if (typeof number !== 'number') {
        res.error(new Error('Not a number'));
        return;
    }
 
    res.success(Math.sqrt(number));
});
 
// Service 'pow' of repository MathRepository
Service.register('pow', (req, res) => {
    const { baseNumber, exponent } = req;
 
    if (typeof baseNumber !== 'number') {
        res.error(new Error('Not a number'));
        return;
    }
 
 
    res.success(Math.pow(baseNumber, exponent));
});
 
 
// --- Step 4: connect to message queue
Service.connect()
    .then(() => { // Connected
        
    })
    .catch((err) => {
        console.log(err);
    });

Package Sidebar

Install

npm i sauromjs

Weekly Downloads

4

Version

1.0.3

License

ISC

Unpacked Size

18.4 kB

Total Files

12

Last publish

Collaborators

  • hoangducnhuan