node.js - 如何使用 Node.js Express 模块化路由

标签 node.js express routing

我正在使用 Express 和 Node 构建一个 Web 应用程序,并试图考虑我的路由,这样我就不会在同一个文件中有数百个路由。该站点在 projects 目录中提供不同的文件,因此我在 routes/ 中创建了一个名为 projectRoutes.js 的文件来处理项目文件的路由:

var express = require('express');

module.exports = function() {

    var functions = {}

    functions.routeProject = function(req, res) {
        res.render('pages/projects/' + req.params.string, function(err, html) {
            if (err) {
                res.send("Sorry! Page not found!");
            } else {
                res.send(html);
           }
       });
   };

    return functions;
}

然后,在我的 routes.js 中,我有这个...

var projectRoutes = require("./projectRoutes");
router.get('/projects/:string', function(req, res) {
    projectRoutes().routeProject(req, res);
});

是否有更好的方法在 projectRoutes.js 中构建此功能?换句话说,我如何配置 projectRoutes.js 以便我可以在 index.js 中编写以下代码行:

router.get('/projects/:string', projectRoutes.routeProject);

上面的代码似乎是处理此类事情的正常方法,但目前上面的行在 Node 中抛出一个错误,指出该函数未定义。

感谢您的帮助!

最佳答案

你应该使用原生的 express router ,它就是为了解决这个确切的问题而制作的!它实质上允许您以模块化方式创建简化的嵌套路由。

对于您的每个资源,您应该将路由分成几个名为 <yourResource>.js 的模块。 .这些模块将包含所有路由代码以及任何其他配置或必要的功能。然后你将它们附加到 index.js 中:

var apiRoute = router.route('/api')
apiRoute.use('/< yourResource >', yourResourceRouter)

例如,如果您有资源 bikes :

index.js :

var apiRoute = router.route('/api')
  , bikeRoutes = require('./bikes')

apiRoute.use('/bikes', bikeRoutes)

然后在bike.js :

var express = require('express')
  , router = express.Router()
  , bikeRoutes = router.route('/')

bikeRoutes.get(function (req, res) {
    res.send('api GET request received')
});

module.exports = bikeRoutes

从那里很容易看出您可以构建许多不同的资源并不断嵌套它们。

在 index.js 中连接路由的一个更大的例子是:

var apiRoute = router.route('/api')
  , bikeRoutes = require('./bikes')
  , carRoutes = require('./cars')
  , skateboardRoutes = require('./skateboards')
  , rollerskateRoutes = require('./rollerskates')

// routes
apiRoute.use('/bikes', bikeRoutes)
apiRoute.use('/cars',  carRoutes)
apiRoute.use('/skateboards', skateboardRoutes)
apiRoute.use('/rollerskates', rollerskateRoutes)

每个路由器都包含类似于 bikes.js 的代码.通过这个例子,很容易看出使用 express 的路由器模块化并使您的代码库更易于管理。

关于node.js - 如何使用 Node.js Express 模块化路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27712768/

相关文章:

javascript - 获取支持的货币列表

JavaScript:res.sendFile 不是函数

Node.js(Express) REST 服务 POST 方法返回 404

ruby-on-rails - 我可以在没有 Controller 的情况下直接从 routes.rb 渲染布局吗?

zend-framework - Zend Url 和模块名称区分大小写

javascript - socket.io 基本发出和监听器失败

node.js - NTVS 没有在我指定的端口上运行 Node 服务

javascript - Livescript,如何结束未嵌套的回调?

node.js - Node/express js 中的嵌套路由

Golang (v1.8) - 错误 : type *mux. Route has no field or method Method