我开始用Express.js和Request.js编写代理服务器
服务器在端口900上运行并执行:
/prototype
/prototype/[this|that]
到相应的静态html
/prototype/this.html
和/prototype/that.html
。我设法用以下代码实现1) - 3):
var express = require('express'), path = require('path'), request = require('request');
var app = express();
app.get('/prototype', function(req, res, next) {
// a) request(req.protocol + '://' + req.get('host') + req.url + '/this').pipe(res);
// b) res.redirect('/prototype/this');
});
app.get('/prototype/:path(this|that)', function(req, res, next) {
var resolvedUrl = req.protocol + '://' + req.get('host') + req._parsedUrl.pathname + '.html';
request(resolvedUrl).pipe(res);
});
app.get('/prototype/sample/:path', function(req, res, next) {
var resolvedUrl = 'http://localhost:8080' + req.url;
request(resolvedUrl).pipe(res);
});
app
.use('/prototype', express.static(path.resolve(__dirname, '../')))
.use(app.router)
.use(express.errorHandler({
dumpException: true,
showStack: true
}));
module.exports = app;
我的文件夹结构是
prototype
|_css
| |_<css files>
|_js
| |_<js files>
|_this.html
|_that.html
this.html引用css和js中的文件
<link rel="stylesheet" href="css/app.css" />
<script data-main="js/app.js" src="js/require.js"></script>
为了实现4)我在请求/prototype/this
时尝试请求/prototype
路径,然后从/js/app.js
和/css/app.css
请求js和css失败的/prototype/js/app.js
和/prototype/css/app.css
(请参阅代码注释中的a)
)。
我希望通过b)
实现我想要实现的行为,但我不希望将浏览器中的URL栏更改为/ prototype / this,而是将其保留在/protoype
中。
有什么好办法吗?
答案 0 :(得分:0)
在/prototype
之后被证明是一个缺失的尾随斜线。
如果没有尾部斜杠,我会在请求目录路径而不尾随斜杠的情况下覆盖重定向到带斜杠的目录的行为。
将其更改为以下内容,它就像魅力一样。
app.get('/prototype/', function(req, res, next) {
// a) request(req.protocol + '://' + req.get('host') + req.url + '/this').pipe(res);
// b) res.redirect('/prototype/this');
});