sandrasoft
TypeScript icon, indicating that this package has built-in type declarations

2.3.3 • Public • Published

Sandrasoft

Support Node of LTS npm version Build Status Document Standard - JavaScript Style Guide

A collection of Node.js ultilities for creating scalable backend services.

Overview

This package is a summarization from my own experience working as a backend engineer during the last 3 years. It is suitable for both software and api development.

Packages

1. SandraCore

Write simple and single threaded RESTfull APIs with declaritive code style.

a. Create a server instance

Create a simple HTTP server with just 5 lines of code:

import { SandraCore } from "sandrasoft";
const config = {
    apiRoot: '/api',
    port: process.env.PORT,
};
const app = new SandraCore(config);
app.startListening();

Or create an HTTPS server with useHttps method:

import { SandraCore } from "sandrasoft";
const config = {
    apiRoot: '/api',
    port: process.env.PORT,
    useHttps: {
        keyFilePath: './private/server.key';
        certFilePath: './private/server.crt';
        passphrase: 'sample';
    }
};
const app = new Server(config);
app.startListening();

b. Apply middlewares into the instance

You can apply middlewares into sandracore instances:

const app = new Server(config);
app.set('view engine', 'ejs');
app.use(morgan('dev'));
app.use(express.json());
app.startListening();

If you prefer express coding style, then do the following:

const server = new Server(config);
const app = server.getInstance();
app.use('/', express.static(path.join(process.cwd(), 'public')));
app.set('views', path.join(process.cwd(), 'views'));
app.set('view engine', 'ejs');
server.startListening();

By default, the following middlewares are automatically added when new sandracore instance is created:

  1. cookieParser
  2. cors
  3. bodyParser.json
  4. bodyParser.urlencoded

c. Write declarity APIs

Create a RESTfull API endpoint with this code style:

const UserLoginRouter = {
    method: 'POST',
    paths: ['/user/login'], 
    validations: {
        body: {
            email: ['isEmail'],
            password: ['!isEmpty'],
        },
    },
    middlewares: [],
    controller: async (req: Request) => {
        const {email, password} = req.body;
        return await UserService.login(email, password);
    }
}
app.applyRoutes({ UserLoginRouter });

Supported functions for validations: see validator.js

⚠️ Important Note:

The current version of sandrasoft only supports validator functions whose accept only 1 param.

For example: isEmail(str) is supported while equals(str, comparison) does not.

Pull request for this feature is pretty much welcomed 💪

d. Apply specific midlewares to a router

Middlewares that are specific to a router can be applied by the following:

import * as multer from "multer";

const UpdateAvatarRouter = {
    method: 'POST',
    paths: ['/user/avatar'], 
    middlewares: [
        /* this middleware looks for authorization token in headers */
        (req: Request, res: Response, next: NextFunction) => {
            if (!req.headers['authorization']) {
                next(new Error('User not logged in'))
            }
            next();
        },
        /* this middleware uses multer library to handle file upload */
        multer({ storage: multer.memoryStorage() }).single('fileUpload');
    ],
    controller: async (req: Request) => {
        /* do something with req.file, given by multer */
    }
}
app.applyRoutes({ UpdateAvatarRouter });

e. Result return from server

Success response schema

{
    "statusCode": 200,
    "data": "Success reponse can be type of any"
}

Error response schema

{
    "statusCode": 500,
    "error": "Error message returned from router's controller or middlewares"
}

2. MongoDb

Documentation comming soon...

3. Google Storage

Documentation comming soon...

Package Sidebar

Install

npm i sandrasoft

Weekly Downloads

25

Version

2.3.3

License

MIT

Unpacked Size

233 kB

Total Files

189

Last publish

Collaborators

  • nichealpham