Ты можешь создать экспресс роутер что будет обрабатывать несколько страниц 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) {