query-parsing-example.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import http from 'http';
  2. import {DataType} from '@e22m4u/js-data-schema';
  3. import {HttpMethod, TrieRouter} from '@e22m4u/js-trie-router';
  4. import {
  5. HttpData,
  6. TrieRouterDataMapper,
  7. } from '@e22m4u/js-trie-router-data-mapper';
  8. const router = new TrieRouter();
  9. router.useService(TrieRouterDataMapper);
  10. // регистрация маршрута для разбора
  11. // query параметра "filter"
  12. router.defineRoute({
  13. method: HttpMethod.GET,
  14. path: '/parseQuery',
  15. meta: {
  16. dataMapper: {
  17. filter: {
  18. source: HttpData.REQUEST_QUERY,
  19. property: 'filter',
  20. schema: {
  21. type: DataType.OBJECT,
  22. required: true,
  23. },
  24. },
  25. },
  26. },
  27. handler: ({state: {filter}}) => {
  28. return filter;
  29. },
  30. });
  31. // создание экземпляра HTTP сервера
  32. // и подключение обработчика запросов
  33. const server = new http.Server();
  34. server.on('request', router.requestListener);
  35. // прослушивание входящих запросов
  36. // на указанный адрес и порт
  37. const port = 3000;
  38. const host = '0.0.0.0';
  39. server.listen(port, host, function () {
  40. const cyan = '\x1b[36m%s\x1b[0m';
  41. console.log(cyan, 'Server listening on port:', port);
  42. console.log(
  43. cyan,
  44. 'Open in browser:',
  45. `http://${host}:${port}/parseQuery?filter={"foo":"bar"}`,
  46. );
  47. });