问题与:when I refresh the page, not the page loads. 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 :(得分:0)
我不愿意发布这个,因为我认为这不是OP问题的真正解决方案。对我来说这是一个黑客,所以使用它需要你自己承担风险。
首先,REST URL的特殊字符如#'#'在他们中。虽然我认为没有标准方法来命名端点,但建议确保URL遵循这些规则;
无论如何,我的方法是。
在服务器代码上;
/config#
,请替换'#' char有一些独特的东西_bbb
足够独特?你判断,只要确保它不会与其他终端发生冲突。客户代码:
示例:强>
<强>客户端:强>
"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 =&gt; {name:test}
这里的想法是。当客户端调用端点时,是的,URL仍然在/config#
,但您对其进行编码,使其看起来像/config%23
。
查看:强>
http://www.w3schools.com/tags/ref_urlencode.asp
然后,当请求进入服务器时,您在expressJS中添加的图层将解码从/config%23
到/config#
的网址,并将#
字符替换为唯一的字符。我们说_bbb
,以便最终的网址为/config_bbb
,并将其路由到实际的端点。
不幸的是,表达并不喜欢端点中包含特殊字符,如果您不将#
替换为可识别的字符,那么您会发现它不会被路由即使URL匹配,它也是正确的。