javascript-server

javascript http server


Keywords
javascript, js, server, http, esmodules, node12, api, es-modules, nodejs, static
License
Unlicense
Install
npm install javascript-server@1.3.2

Documentation

javascript-server

CΠ΅Ρ€Π²Π΅Ρ€ для node12

установка / instalation

$ npm install javascript-server
  • Server - сСрвинг / static, dynamic
  • Router - Ρ€ΠΎΡƒΡ‚ΠΈΠ½Π³
  • Api - api (http post only)
  • Socket - WebSocket server

настройка ΠΈ использованиС / setting and usage

Π²Π°ΠΌ понадобится ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ для node12 (es-module)

/api
  index.js
  controllers.js

/service
  ...

/htdocs
  index.html

/libraries
  ...

index.js
router.js
package.json

package.json - для node12 ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΈΠΏ module

{
  "type": "module",
  "scripts": {
    "start": "node --experimental-modules index.js"
  },
  ...
}

api/index.js - config api

import {Api}       from 'javascript-server';
import controllers from './api/controllers.js';

const config = {
  method  : 'post',
  type   : 'application/json',
  route  : '/api',
  require: ['version', 'method'], // http query params
  default: {
    version: '1.0.0'
  }
};

export default new Api(config).version('1.0.0', controllers);

// Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π²Ρ‹Π±ΠΎΡ€Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π°ΠΏΠΈ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запроса
// Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,
// .handler((api, request, data) => api.call(request.version, request.method, data));

api/controllers.js - список ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² api

import usersInfoService from '../service/usersInfoService.js';
import friendsInfoService from '../service/friendsInfoService.js';

export default {
  debug: { // тСстовый Ρ€Π°Π·Π΄Π΅Π» для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ
    api: {
      test: ({a, b}) => a + b
    }
  },
  users: {
    all: () => usersInfoService.allUsersList(),
    get: ({id}) => usersInfoService.fromId(id),
    ...
  },
  friends: {
    get: ({id}) => friendsInfoService.fromId(id),
    add: ({id, user}) => friendsInfoService.follow(id, user),
    remove: (id, user) => friendsInfoService.unfollow(id, user),
    ...
  },
  ...
}

Π’ ΠΏΠ°ΠΏΠΊΠ΅ services Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ сСрвисы (usersInfoService ΠΈ friendsInfoService) ΠΈΠ»ΠΈ Π·Π°ΠΊΠΎΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строки ΠΏΡ€ΠΎ Π½ΠΈΡ…


router.js - Ρ€ΠΎΡƒΡ‚ΠΈΠ½Π³

import {Router} from 'javascript-server';

export default new Router()
                                      // static routing
  .htdocs('/htdocs')                  // wwwroot folder
  .static('/libraries', {             // other folders for static libs, dependencies, etc
    '/components': '/components',
    '/static'    : '/static'
  })
                                      // dynamic routing (?)
  .get('/regex',  request => { ... })
  .post('/regex', request => { ... });

index.js - server

import {Server} from 'javascript-server';
import router   from './router.js';
import api      from './api/index.js';

const server = Server.http({host: 'localhost', port: 8080});
server
  .router(router)
  .api(api)
  .on('start', server => console.log(`server started on ${server.config.port}`)
  .start();

запуск

$ npm start

ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°

http://localhost:8080 - ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅

содСрТимоС Ρ„Π°ΠΉΠ»Π° /htdocs/index.html

инструмСнты Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° -> console - Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ debug.api.test

const request = '/api?debug.api.test';
// Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ /api?method=debug.api.test

await fetch(request, {
  method: 'post',
  headers: {
    "Content-type": "application/json; charset=UTF-8"
  },
  body: JSON.stringify({
    a: 3,
    b: 4
  })
})
  .then(response => response.text())

сумма чисСл a ΠΈ b

P.S. МоТно, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ„Ρ€ΠΎΠ½Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ javascript-fetch-api для ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… запросов

features

todo / roadmap