2016-07-20 4 views
0

Вопрос связан с: when I refresh the page, not the page loads. Angularjs + NodejsКак обрабатывать маршруты, имеющие # в nodejs с expressjs?

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

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') не отправляется на сервер, он используется только браузером. Не имеет ничего общего с угловым ... как работает хэш – charlietfl

+0

Необычно иметь имена конечных точек со специальными значениями символов в них. Чтобы упростить вещи - вы должны добавить в «layer» в middleware expressJS, чтобы преобразовать «#» в нечто, уникальное слово или что-то еще. Затем зарегистрируйте свою конечную точку соответственно. Если вы не возражаете против альтернативы, я могу ответить на мою идею как ответ для вас. –

+0

@SamuelToh Пожалуйста, помогите мне. Благодаря! –

ответ

0

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

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

  1. все строчные (потому что URL не чувствительны к регистру)
  2. без специальных символов
  3. нет ГорбатыйРегистр

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

На код сервера;

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

код клиента:

  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 совпадает.

+0

@Z. Данило Хоуп это помогает. Я в порядке с решением, не получающим makred, как ответил, потому что я просто бросаю идеи здесь, что является своего рода хакерским обходным решением для меня. –

+0

@ Sanuel-Toh Чтобы увидеть решение моей проблемы: [ссылка] (http://stackoverflow.com/questions/38447777/when-i-refresh-the-page-not-the-page-loads-angularjs- nodejs) также большое спасибо за вашу помощь !!! –

+0

@ Z.Danilo Эй, не проблема. Рад помочь, выучили некоторые вещи на этом пути тоже. –

Смежные вопросы