【发布时间】:2014-03-29 06:17:52
【问题描述】:
我的应用程序中有几个“api”端点被前端框架用于其 AJAX 进程。出于组织目的,我想重用这些端点的代码来检索服务器端渲染的数据,在某些情况下我这样做是为了与搜索引擎很好地配合。所以,理想情况下,我会实现某种 HMVC 设置来简单地访问 API 端点上的路由。具体来说,我想在发出顶级响应之前获取响应并对其执行其他操作(例如,呈现带有结果的视图)。
例如:
app.get('/post/recent', function(req, res) {
app.doRequest('/api/posts/', req, function(res2) {
var data = res2.body;
res.render('posts/index', data);
});
});
最好的方法是什么?
到目前为止,我想出的最佳选择是:
将端点中的所有逻辑公开为一种方法,该方法将在app.get('...', myFunction) 中使用,然后我可以在该路径的快速流之外的其他地方调用myFunction。 但是,除非我编写了自己的不依赖于 express 的中间件实现,否则这不会给我一个可靠的方式来运行特定于端点的中间件(我也想在 HMVC 请求上运行) . API 端点有类似if(!hasAccess) res.send(403) 的中间件,我特别不想在我的主路由中发生这种情况,因为我想呈现一个漂亮的错误页面,而不是仅仅发送一个错误代码。
例子:
var getPosts = function(req) {
var deferred = q.defer()
doDatabaseQuery(req.query).then(function(response) {
deferred.resolve(response)
});
};
app.get('/api/posts', myMiddlewareFunction(), function(req, res) {
getPosts(req).then(function(response) {
res.send(response);
});
);
app.get('/post/recent', function(req, res) {
// I want to run middleware here, not in root level
getPosts(req).then(function(response) {
res.render('post/index', response);
}, function(err) {
res.render('error/noaccess');
});
});
有更好的想法吗?有没有办法以编程方式访问快速路由并获得结果?
【问题讨论】: