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

    2.2.10 • Public • Published


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

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


    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.


    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);

    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);

    b. Apply middlewares into the instance

    You can apply middlewares into sandracore instances:

    const app = new Server(config);
    app.set('view engine', 'ejs');

    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');

    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'))
            /* 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...


    npm i sandrasoft

    DownloadsWeekly Downloads






    Unpacked Size

    231 kB

    Total Files


    Last publish


    • nichealpham