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.5.4

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