您好我想绑定我的应用程序的URI,例如让我们想象一下这个场景。
我在端口3000上运行快速应用,
端口80上的nginx,将URI api
的请求代理到端口3000
快递上有这条路线
// Home
app.get('/', function(req, res) {
res.send('Hello!');
});
如果我尝试从 localhost:3000 进行访问,我会在浏览器中显示Hello!
(预期的那样),
但如果我尝试从localhost / api访问,我会收到错误,当然他找不到我尝试访问的路径。
如果我将app.get更改为app.get('/api/...
,它会按预期工作,但这不是我想要的......我需要在每条路线中添加api
,必须有另一种方法,例如:
我阅读了文档,但找不到任何可以解决我的问题的东西,而且我正在考虑做一个在express上进行URI绑定的包来解决这个问题。
答案 0 :(得分:1)
请参阅我的回答here,以获取一个解决方案,该解决方案可让您将与引导/api
匹配的每个请求指向特定的快速应用。在链接的情况下,用户想要在没有前导片段的情况下做一些事情。您可以省略主要快递应用的app.use(app.router)
,因为您只关心/api/
路线。
<snip>
var http = require('http');
var express = require('express');
var desktopApp = express();
var mobileApp = require('./mobile.js');
desktopApp.use('/mobile', mobileApp)
desktopApp.use(desktopApp.router);
</snip>
此外,我很确定您实际上可以自己重写request.url
。我从未尝试过这个,所以我不能保证它有效!请参阅docs http://expressjs.com/4x/api.html#req.originalUrl另外一定要把它放在路由函数的最顶层,这样它就会在任何后续路由之前执行。
app.all('*', function(req, res, next){
req.url = req.url.replace(/^\/api/, '');
//the regex replaces leading /api with empty string
//req.originalUrl will keep the old url
next();
});