Kselax.ru

Hacker Kselax — the best hacker in the world

Menu
  • Блог
  • Контакты
  • wp plugin генератор
  • Русский
    • Русский
    • English
Menu

express.js роутер с регулярными выражениями

Posted on 8 июня, 2019 by admin

Ты можешь создать экспресс роутер что будет обрабатывать несколько страниц portfolio, projects, reviews, используя такую структуру как показано ниже

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
const express = require('express');
const router = express.Router();
 
const DB = require('../../core/my_db/DB.js')
 
 
 
// # 1
/* /api/v1/users/:login/portfolio/?user&portfolio */
router.get(/\/(.*)\/(portfolio|projects|reviews)/, function(req, res, next) {
  let login = req.params[0]
  
  const getUser = (login) => {
    return new Promise((resolve, reject) => {
      DB.pool.query(
        `SELECT *
         FROM `users`
         WHERE login = ?`,
        [login],
        (err, r) => {
          if (err) throw err
          if (r.length === 1) {
            delete r[0].pass
            return resolve({ user: r[0] })
          }
          return reject({ error: "notFound" })
        }
      )
    })
  }
 
  const getPortfolio = (login) => {
    return new Promise((resolve, reject) => {
      DB.pool.query(
        `SELECT p.*
         FROM `users` u
         INNER JOIN `portfolios` p
         ON p.userId = u.id AND u.login = ?`,
        [login],
        (err, r) => {
          if (err) throw err
          resolve({ portfolios: r })
        }
      )
    })
  }
 
  const getProjects = (login) => {
    return new Promise((resolve, reject) => {
      DB.pool.query(
        `SELECT p.*
        FROM `users` u
        INNER JOIN `projects` p
        ON p.userId = u.id AND u.login = ?`,
        [login],
        (err, r) => {
          if (err) throw err
          resolve({ projects: r })
        }
      )
    })
  }
 
  const getReviews = (login) => {
    return new Promise((resolve, reject) => {
      DB.pool.query(
        `SELECT r.*,
            u2.id as u2_id,
            u2.login,
            u2.avatar,
            u2.firstName,
            u2.secondName
        FROM `users` u
        INNER JOIN `reviews` r
        ON r.userId = u.id AND u.login = ?
        INNER JOIN `users` u2
        ON r.authorId = u2.id`,
        [login],
        (err, r) => {
          if (err) throw err
          resolve({ reviews: r })
        }
      )
    })
  }
 
  
 
  let requests = []
  console.log('req.query = ', req.query);
 
  if (req.query.hasOwnProperty('user')) {
    requests.push(getUser(login))
  }
 
  if (req.query.hasOwnProperty('portfolio')) {
    requests.push(getPortfolio(login))
  }
 
  if (req.query.hasOwnProperty('projects')) {
    requests.push(getProjects(login))
  }
 
  if (req.query.hasOwnProperty('reviews')) {
    requests.push(getReviews(login))
  }
  
  
  
 
  
 
  Promise.all(requests)
    .then(values => {
      console.log(values); // [3, 1337, "foo"]
      res.json(values)
    })
    .catch(err => {
      res.json(err)
    })
  
  
});
 
 
 
// # 2
/* /api/v1/users/:login/projects/ */
router.get('/:login/projects/', function(req, res, next) {
  res.json({ hello:'world' })
})
 
module.exports = router;

 

Это очень важно, строка что определяет регулярное выражение должно быть js регулярное выражение. Не строка!

1
router.get(/\/(.*)\/(portfolio|projects|reviews)/, function(req, res, next) {

 

 

Добавить комментарий Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Рубрики

  • C++ (293)
  • JavaScript (1)
  • linux (1)
  • MFC (39)
  • node.js (2)
  • React (3)
  • uncategorized (1)
  • vBulletin (5)
  • Visual Studio (9)
  • wordpress (18)
  • Разное (29)

Метки

Ajax bootstrap CentOS CLI expressjs FormData GDlib google Invisible reCAPTCHA JWT media MFC php react-router-dom redux repository wordpress RTTI STL vBulletin vector Visual Studio WINAPI wordpress wp-plugins XMLHttpRequest Двоичное дерево Задачи С++ Игры С++ Исключения С++ О-большое Операторы_С++ Перегрузка операторов С++ Поиск С++ Потоки Проектирование_С++ С++ Типы_С++ Типы С++ Шаблоны С++ библиотеки локализация макросы С++ сортировка С++

Свежие комментарии

  • RA3PKJ к записи visual C++, создание диалоговых окон.
  • JasonReant к записи Создание и использование статических библиотек .lib в visual studio.
  • MyWin2020 к записи Программка для заполнения форума на vBulletin 3.8.7
  • ScottJip к записи Создание и использование статических библиотек .lib в visual studio.
  • ArnoldKig к записи Создание и использование статических библиотек .lib в visual studio.
©2021 Kselax.ru Theme by ThemeGiant