RomanDillerNsk
@RomanDillerNsk
JavaScript

Как составить регулярное выражение в маршруте express?

Коллеги доброго времени суток, пишу приложение на nodejs и встал вопрос организовать универсальный роутер, что бы не писать маршруты под каждый url. но появилась проблема и не могу понять почему:

вот точка входа, главный файл:

const path = require('path');
const http = require('http');
const express = require('express');
const minify = require('express-minify-html');
const favicon = require('express-favicon');
const staticAsset = require('static-asset');
const compression = require('compression');
const config = require('./config.json');
const router = require('./controllers/router');

const app = express();

app.use(compression());

app.use(minify({
  
    override:      true,
    exception_url: false,
    htmlMinifier: {

        removeComments:            true,
        collapseWhitespace:        true,
        collapseBooleanAttributes: true,
        removeAttributeQuotes:     true,
        removeEmptyAttributes:     true,
        minifyJS:                  true,
        minifyCSS:                  true

    }

}));

app.use(favicon(path.join(__dirname, 'public/images/favicon.png')));

app.set('views', path.join(__dirname, 'templates'));
app.set('view engine', 'ejs');

app.use(staticAsset(__dirname + '/public'));
app.use(express.static(__dirname + '/public'));

app.use(router);

app.use((req, res, next) => {

	next(404);

});

app.use((err, req, res, next) => {

    res.status(err.status || 404);

    console.log(err + ' : ' + req.url);

    res.render('index.ejs', {

        template: './pages/404',
        description: '404 не найдено',
        keywords: '404 не найдено'

    });

});

const server = http.createServer(app);

server.listen(config.port, () => {
 
  	console.log('server is ready');

});


Думаю всем понятно, что там происходит. Так же есть роутер:

// router
'use strict';
const express = require('express');
const router = express.Router();

const map = require('./map');
router.get(/\/([a-z\-]*)/gi, map.get);

module.exports = router;


Так вот, идея в том что нужно парсить url, вид у url может быть следующий:

/
/news
/news/
/news/sport
/news/sport/
/news/sport/12234
/news/sport/12234/

Тут то же думаю ясно. Но вот появилась проблема, нужная страница открывается через раз, т.е. либо выдается 404 либо нужная страница, прошу помощи, подскажите, может где-то есть ошибка?

Заранее благодарю.
  • Вопрос задан
  • 302 просмотра
Пригласить эксперта
Ответы на вопрос 1
@alikenski
Fullstack Web Developer
/^(\/news\/)[0-9]+/
для /news/любая_цифра_или_число

^(\/news\/sport\/)[0-9]+
для /news/sport/любая_цифра_или_число

Тестируйте на сайте клик
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы