我正在使用Node.js和Express编写一个应用程序接口。我的API有如下形式的GET方法:
/api/v1/doSomething
/api/v1/doSomethingElse
我的代码看起来像这样:
server.js:
var app = express();
...
var routes = require('./routes')
routes.attachHandlers(app, '/api/v1')
routes/index.js
...
module.exports.attachHandlers = function(app, context) {
//get a list of all the other .js files in routes
//for each route, require() it and call it myRoute
myRoute.attachHandlers(app, context)
}
routes/some route.js
...
module.exports.attachHandlers = function(app, context) {
app.get(context + '/doSomething', doSomething)
app.get(context + '/doSomethingElse', doSomethingElse)
}
...
实际上,我正在通过应用程序向下传递上下文路径/挂载点。但是,如果有人编写如下所示的路由,则上下文将会丢失:
app.get('/doFoo', foo)
而不是将这部分应用程序接口安装在/api/v1/doFoo
上,而是在/doFoo
上。我希望避免像这样传递上下文路径。
app.use支持在可选的挂载路径上挂载中间件。我在网上看到过使用app.use
在挂载路径上挂载整个Express应用程序的参考资料。这似乎是我想要做的事情,但我不确定如何做,或者这是否是我的特定用例的最佳解决方案。
总而言之,我想在默认情况下使用特定的前缀挂载我的app.get()路由。做这件事的最好方法是什么?
发布于 2013-06-19 03:00:27
我认为express-namespace会为此而努力。
发布于 2013-06-19 03:43:04
以下是在Express 3中挂载路由的工作示例:
./snipe3app.js
var express = require('express');
var app = module.exports = express();
app.get('/subapp', function (req, res) {
res.send('You are on the /sub/subapp page.');
});
./app.js
var express = require('express'),
http = require('http'),
subApp = require('./snipe3app'),
app = express();
app.use(express.favicon());
app.use(express.bodyParser());
app.use(app.router);
app.use('/sub', subApp);
app.get('/', function (req, res) {
res.send('You are on the root page');
});
http.createServer(app).listen(3000, function(){
console.log('Express server listening on port 3000. Point browser to route /secure');
});
在执行此操作时,您必须注意处理路由的顺序。
https://stackoverflow.com/questions/17173286
复制相似问题