1.0.0 • Published 3 years ago

jsn6-core v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
3 years ago

jsn6-core

Core functions

Example

Load config from ENV

@Startup('config')  // Init when startup then store data in global.config
@BaseConfig('.env') // Load from .env file
export class AppConfig {
  name = 'profile'
  NODE_ENV = 'development'
  host = '0.0.0.0'
  port = 3001
  grpcPort = 5001
  logger = {
    maxRequestExecutionTime: 3000,
    maxExecutionTime: 1000,
    level: 'error',
    onlyLevel: '', // Only show some log level
  }
  redis = {
    keyPrefix: 'user',
    uri: 'redis://127.0.0.1:6379',
  }
}

export const config = global['config']

Logger

  • Base on winston
@Startup('logger.logger')
export class AppLogger extends Logger {
  constructor() {
    super({
        sentryDSN: '',
        level: 'debug',
        onlyLevel: '', // Only show some log level
    })
  }
}

export const logger = global['logger']

logger.error(new Error('Error now'))
logger.info('Done')
logger.warn('Warning')
logger.debug('Debug here')

Worker

import { rabbit, redis } from '@/global';
import { Startup } from 'jsn6-core/dist/core/Startup';
import { Worker } from 'jsn6-core/dist/worker';

@Startup('worker.start')
export class MyWorker extends Worker {

    async onInit() {
        // Init worker    
    }

    async isAvailable() {
        // Check worker is live or dead
    }

    async onStart() {
        // Do something here
    }

    async onDispose() {
        // Execute this when something error then crash app
    }
}

Validation

import { Schema, assert } from 'jsn6-core/dist/validator/Assert'

@Schema('insert', {
    id: 'number|convert',
    name: 'string|notEmpty',
    age: 'number|convert|optional'
})
export class UserModel {
    id: number
    name: string
    age: number
}

assert(UserModel, 'insert', {
    id: 1,
    age: 'abc'
})  
// Expected: Throw error age must be number and name is requried