Как обрабатывать маршруты с # в nodejs с помощью expressjs?

0

Вопрос связан с: когда я обновляю страницу, а не загружается страница. Angularjs + Nodejs

Но в этом случае я отключу html5mode и, следовательно, URL-адрес появится символ #. Я хочу иметь контроль доступа к определенным разделам кода, которые я покажу ниже, но не знаю, как обращаться С#

app.get(['/homepage', '/recoveryPassword', '/manageAccount', '/shop/:itemId/cat/:categoryId', '/shop/:shopName', '/manageMyShops', '/manageMyShops/id/:shopId', '/manageWeb'], isLoggedIn, function (req, res) {
        res.end();    
    });
  • 0
    URL-хэш ( #xxxxx ) не отправляется на сервер, он используется только браузером. Ничего общего с угловым .... как работают хэши
  • 0
    Необычно иметь имена конечных точек со специальными символьными значениями в них. Чтобы упростить вещи - вы должны иметь возможность добавить layer к промежуточному программному обеспечению expressJS, чтобы преобразовать «#» во что-то, уникальное слово или что. Затем зарегистрируйте свою конечную точку соответственно. Если вы не возражаете против альтернативы, я могу поддержать мою идею как ответ для вас.
Показать ещё 1 комментарий
Теги:
express

1 ответ

0

Я не хочу публиковать это, потому что я думаю, что это НЕ является реальным решением проблемы ОП. Для меня это взлом, поэтому используйте его на свой страх и риск.

Начнем с того, что для URL REST нетрадиционных символов, таких как "#". Хотя я считаю, что нет стандартного способа именования конечных точек, но рекомендуется следить за тем, чтобы URL-адреса соответствовали этим правилам;

  1. все в нижнем регистре (потому что url не чувствителен к регистру)
  2. нет специальных символов
  3. нет верблюжьего случая

Во всяком случае, мой подход.

По серверному коду;

  1. Предполагая, что вы определяете путь /config# замените символ "#" на нечто уникальное, например, _bbb вы судите, просто убедитесь, что он не сталкивается с другими конечными точками.
  2. Добавьте экспресс-слой для декодирования специального символа URL и замените специальный символ уникальным словом, которое вы указали в пункте 1. (Это будет более ясно, когда вы увидите код).

Код клиента:

  1. Кодировать URL. Зачем? Потому что URL-адрес не может иметь "#", потому что это зарезервированный символ. Поэтому он должен быть закодирован как "% 23".

Пример:

Клиент:

"use strict";
let request = require("request");

let req = {
    url: 'localhost:4444/${encodeURIComponent('config#')}',
    proxy: 'http://localhost:4444',
    method: 'GET',
    headers: {
        'Content-Type': 'application/json'
    }
};

request(req, function (err, res, body) {
    this.config = JSON.parse(body);
    console.log("response => " + this.config);
});

Сервер:

"use strict";
var express = require("express");
var bodyParser = require("body-parser");
var app = express();
var config = require('config');

app.use(bodyParser.json());
app.use((req, res, next) => {
    let decoded_url = decodeURIComponent(req.url);
    req.url = decoded_url.replace('#', '_bbb');
    next();
});

app.get('/config_bbb', function(req, res){
    res.json('{name: test}');
});


// Start the server
app.set('port', 4444);

app.listen(app.get('port'), "0.0.0.0", function() {
    console.log('started');
});

Вывод:

response => {name: test}

Идея здесь. Когда клиент вызывает конечную точку, да, URL-адрес по-прежнему находится в /config# но вы кодируете его так, чтобы он выглядел как /config%23.

Видеть:

http://www.w3schools.com/tags/ref_urlencode.asp

Затем, когда запрос поступает на сервер, добавленный вами слой в expressJS расшифровывает URL-адрес из /config%23 в /config# и вы заменяете # char чем-то уникальным. Пусть say _bbb, так что конечный URL-адрес /config_bbb который направляется к фактической конечной точке.

К сожалению, express не любит, чтобы конечные точки имели в них специальные символы, если вы не заменяете # чтобы быть чем-то узнаваемым, тогда вы обнаружите, что он не будет правильно маршрутизироваться, даже если ваш URL совпадает.

  • 0
    @Z. Данила Надеюсь, это поможет. Я согласен с решением не получить Макред, как ответ, потому что я просто бросаю идеи здесь, что является своего рода хакерским обходным путем для меня.
  • 0
    @ Sanuel-Toh Чтобы увидеть решение моей проблемы: ссылка также большое спасибо за вашу помощь !!!
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню