Я не хочу этот пост, потому что я думаю, что это не реальное решение OP-х проблема. Для меня это взлом, поэтому используйте его на свой страх и риск.
Для начала - для URL-адреса REST нет обычных символов, таких как «#». Хотя я считаю, что нет стандартного способа именования конечных точек, но рекомендуется следить за тем, чтобы URL-адреса соответствовали этим правилам;
- все строчные (потому что URL не чувствительны к регистру)
- без специальных символов
- нет ГорбатыйРегистр
Во всяком случае, мой подход.
На код сервера;
- Предполагая, что вы определяете путь
/config#
, замените символ '#' на что-то уникальное, например. _bbb
Уникально ли? вы судите, просто убедитесь, что он не сталкивается с другими конечными точками.
- Добавьте выразительный слой, чтобы декодировать специальный символ URL и заменить специальный символ уникальным словом, которое вы указали в пункте 1. (Это будет более ясно, когда вы увидите код).
код клиента:
- Encode 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');
});
Выход:
ответ => {имя: тест}
Идея здесь. Когда клиент вызывает конечную точку, да, URL-адрес по-прежнему с /config#
, но вы кодируете его так, чтобы он выглядел как /config%23
.
См:
http://www.w3schools.com/tags/ref_urlencode.asp
Затем, когда приходит запрос через в сервер, вы добавили в expressJS слой будет декодировать URL из /config%23
в /config#
и замене #
полукокса с чем-то уникальный. Скажем, _bbb
, так что конечный URL-адрес равен /config_bbb
, который направляется к фактической конечной точке.
К сожалению, express не поддерживает конечные точки, чтобы иметь в них специальные символы, если вы не замените #
на то, чтобы быть чем-то узнаваемым, тогда вы обнаружите, что он не будет правильно маршрутизирован, даже если ваш URL совпадает.
URL-адрес хэша ('# xxxxx') не отправляется на сервер, он используется только браузером. Не имеет ничего общего с угловым ... как работает хэш – charlietfl
Необычно иметь имена конечных точек со специальными значениями символов в них. Чтобы упростить вещи - вы должны добавить в «layer» в middleware expressJS, чтобы преобразовать «#» в нечто, уникальное слово или что-то еще. Затем зарегистрируйте свою конечную точку соответственно. Если вы не возражаете против альтернативы, я могу ответить на мою идею как ответ для вас. –
@SamuelToh Пожалуйста, помогите мне. Благодаря! –