URI绑定Express.js

时间:2014-05-19 14:28:35

标签: node.js express

您好我想绑定我的应用程序的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,必须有另一种方法,例如:

  • URI绑定
  • URI过滤器??

我阅读了文档,但找不到任何可以解决我的问题的东西,而且我正在考虑做一个在express上进行URI绑定的包来解决这个问题。

1 个答案:

答案 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();
});