Skip to content

πŸŸ‘πŸ“¦ Simple node framework for typical tasks. As NPM Packege. πŸ”ŒπŸ”₯ DI system for system modules

License

Notifications You must be signed in to change notification settings

scott-walker/node-framework

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

35 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Node Framework

node-framework

NPM Package Scottweb

ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΈ лСгковСсный Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡

Установка

ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ΅ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

npm init -y
npm i @scottwalker/node-framework
cp -r ./node_modules/@scottwalker/node-framework/demo/* .
node .

ИспользованиС

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ использования Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ прилоТСния (index.js)

const { Application, Container } = require("@scottwalker/node-framework")
const config = require("./config/main")
const modules = require("./modules")

// Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ зависимостСй
const container = new Container()

// Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
const app = new Application(container, modules, config)

// Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
app.run()

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ простой ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ (config.js)

const path = require("path")

module.exports = {
  router: {
    options: {
      jsonResponse: true
    },
    headers: {
      "Content-Type": "application/json"
    },
    handler: ({ response }) => response.ok("default"),
    errorHandler: ({ response }) => response.error("error"),
  },
  logger: {
    dir: path.resolve(__dirname, "../logs"),
  },
  server: {
    host: "localhost",
    port: 3030,
    ssl: {}
  }
}

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ ΠΈΠΌΠ΅Π΅Ρ‚ основныС сСкции

router - ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Ρ€ΠΎΡƒΡ‚Π΅Ρ€Π°
  options - ΠΎΠΏΡ†ΠΈΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ² ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
    jsonResponse - ΠΎΡ‚Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚Π΅Π»ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON
  headers - HTTP Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
  handler - ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹Ρ… запросов ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
  errorHandler - ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½Ρ‹Ρ… запросов ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

logger - ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Π»ΠΎΠ³Π³Π΅Ρ€Π°
  dir - ДирСктория для Π»ΠΎΠ³ΠΎΠ²
  dateFormat - ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π΄Π°Ρ‚Ρ‹ Π² Π»ΠΎΠ³Π°Ρ…

server - ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ сСрвСра
  host - Π₯ост сСрвСра
  port - ΠŸΠΎΡ€Ρ‚ сСрвСра
  ssl - Настройки SSL соСдинСния

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ описания ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ прилоТСния modules.js

const { Module } = require("@scottwalker/node-framework")

module.exports = [
  new Module("base", { 
    // ΠœΠ°Ρ€ΡˆΡ€ΡƒΡ‚Ρ‹ модуля
    routes: [
      {
        method: "GET", 
        path: "/", 
        handler: ({ response }) => response.ok("Hello World!"),
        errorHandler: ({ response }) => response.error("Goodbye World!"),
      },
    ],

    // ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ модуля
    commands: [
      {
        name: "base/hello",
        params: [
          { key: "name", type: "string", required: true },
          { key: "p", alias: "price", type: "number", default: 100 },
        ],
        flags: [
          { key: "a", alias: "all" }
        ],
        handler: ({ params }) => {
          const { name, price, all } = params 

          console.log({ name, price, all })
        }
      }
    ],

    // Зависимости модуля
    dependencies: {
      "base/models/User": ({ name }) => new require("./models/User")(name)
    }
  })
]

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ свойства

routes - ОписаниС ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ модуля
dependencies - ОписаниС зависимостСй модуля

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ зависимостСй

Π’ вСрсии 2.0.1 Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Π½Π° структура Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ использования ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° зависимостСй.

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ зависимостСй ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ 2 стратСгии получСния Π²Π½Π΅Π΄Ρ€Π΅Π½Π½Ρ‹Ρ… зависимостСй

invoke - Π’Ρ‹Π·Π²Π°Ρ‚ΡŒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ, которая ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ создаСтся ΠΏΠΎ стратСгии make, Π° ΠΏΡ€ΠΈ Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΡ… invoke Π²Ρ‹Π·ΠΎΠ²Π°Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ€Π°Π½Π΅Π΅ экзСмпляр зависимости  
make - Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр зависимости

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ описания зависимостСй прилоТСния

const { Container } = require("@scottwalker/node-framework")

// Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ зависимостСй
const container = new Container({
  // ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹
  "app/clients/HttpClient": ({}, { host, strict }) => new require("./clients/HttpClient")(host, strict),
  "app/clients/MongoClient": ({}, { config }) => new require("./clients/MongoClient")(config),

  // МодСли
  "app/models/CampaignModel": () => new require("./models/CampaignModel")(),
  
  // Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ
  "app/repositories/CampaignRepository": ({ invoke }) => {
    const CampaignRepository = require("./repositories/CampaignRepository")
    const mongoClient = invoke("app/clients/MongoClient")

    return new CampaignRepository(mongoClient)
  },

  // БСрвисы
  "app/services/CampaignService": ({ invoke, make }) => {
    const CampaignService = require("./services/CampaignService")
    const httpClient = invoke("app/clients/HttpClient", { host: "localhost", strict: true })
    const campaignRepository = make("app/repositories/CampaignRepository")

    return new CampaignService(httpClient, campaignRepository, { logged: true })
  }
})

Командная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°

Π’ вСрсии 2.1.4 Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для выполнСния ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ прилоТСния.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ консольного прилоТСния

const { Shell } = require("@scottwalker/node-framework")
const config = require("./config/main")
const modules = require("./modules")
const container = require("./container")(config)

// Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ
const shell  = new Shell(container, modules, config)

// ΠŸΠ°Ρ€ΡΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ 
const { name, params } = shell.parse(process.argv)

// Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ
shell.exec(name, params)

About

πŸŸ‘πŸ“¦ Simple node framework for typical tasks. As NPM Packege. πŸ”ŒπŸ”₯ DI system for system modules

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •