首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将路由逻辑移出app.js

将路由逻辑移出app.js
EN

Stack Overflow用户
提问于 2012-07-16 00:59:48
回答 2查看 1.2K关注 0票数 3

我正在设计一个使用node.js和Express的应用程序,我想知道是否可以将某些路由逻辑从app.js文件中移出。对于exapmle,我的app.js当前包含:

代码语言:javascript
复制
app.get('/groups',routes.groups);
app.get('/',routes.index);

有没有一种方法可以将这个逻辑从app.js文件中移出,并且只有下面这样的内容:

代码语言:javascript
复制
app.get('/:url',routes.get);
app.post('/:url",routes.post);

这样所有GET请求都将由routes.get处理,而所有POST请求将由routes.post处理

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-16 01:10:38

您可以传递一个正则表达式作为路由定义:

代码语言:javascript
复制
app.get(/.+/, someFunction);

这个可以匹配任何东西。但是,如果您只是想将路由定义移到主app.js文件之外,那么这样做要清楚得多:

app.js

代码语言:javascript
复制
var app = require('express').createServer();

...

require('routes').addRoutes(app);

routes.js

代码语言:javascript
复制
exports.addRoutes = function(app) {
    app.get('/groups', function(req, res) {
        ...
    });
};

这样,您仍然使用Express的内置路由,而不是重新滚动您自己的路由(就像您在示例中必须做的那样)。

票数 5
EN

Stack Overflow用户

发布于 2012-07-16 01:14:49

完全公开__:我是下面提到的节点模块的开发者。

有一个节点模块可以做你想做的事情(并且最终会做得更多)。它为express提供了基于约定而非配置的自动路由。该模块的名称是蜜糖-express,但目前处于alpha开发阶段,还不能在NPM上使用(但您可以从https://github.com/jaylach/honey-express的源代码中获得它。

它是如何工作的一个简短的例子:(请注意这个coffeescript)

代码语言:javascript
复制
# Inside your testController.coffee file. Should live inside /app/controllers
honey = require 'honey-express'

TestController = new honey.Controller
    index: ->
        # @view() is a helper method to automatically render the view for the action you're executing. 
        # As long as a view (with an extension that matches your setup view engine) lives at /app/views/controller/actionName (without method, so index and not getIndex), it will be rendered.
        @view()
    postTest: (data) ->
        # Do something with data

现在,在您的app.js文件中,您只需设置一些简单的配置:

代码语言:javascript
复制
# in your app.configure callback...
honey.config 'app root', __dirname + '/app'
app.use honey.router()

现在,只要有请求进来,honey就会自动查找具有指定路由的控制器,然后查找匹配的操作。例如:

  • /test将自动路由到testController
  • 的index/getIndex()方法,如果它exists
  • /test/test将自动路由到postTest的postTest()方法(如果http方法是POST),它将自动路由到testController的index/getIndex()方法(默认控制器为home)。

正如我所提到的,该模块目前处于alpha状态,但自动路由工作得很好,并且已经在两个不同的项目上进行了测试:)但由于它处于alpha开发阶段,文档缺失。如果您决定走这条路,您可以查看我在github上提供的示例,查看代码,或者联系我,我很乐意提供帮助:)

编辑:我还应该注意到,honey express确实需要最新的express (BETA)版本,因为它使用了express 2.x中没有的功能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11493849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档