node.js - expressjs路由配置对象?

标签 node.js express

你能简单地在一个对象中设置所有路由配置吗?基本上我想做的是有一个名为routing.js 的文件,它导出一个包含所有路由的对象。必须为每条路线使用express.get() 是很平常的事情。

最佳答案

我实际上有一个文件夹,其中包含我的路线的所有文件(我按对象将它们分开)。我还将我的 Controller 也分离到文件中。路由文件如下所示:

/**
 * Module dependencies.
 */
var controller = require('../controllers/index');

/**
 * The API root for this object.
 */

var root = '/';

/**
 * Route definitions.
 */
var routes = function (app) {

  // get index
  app.get(root, controller.getIndex);
};

/**
 * Exports.
 */
module.exports = routes;

然后在我的 app.js 文件中执行此操作,自动加载所有路由文件并配置 500 和 404 路由:

fs.readdir(__dirname + '/routes', function (err, files) {
  if (err) throw err;
  files.forEach( function (file) {
    require('./routes/' + file)(app);
  });

  /**
   * 500 page.
   */
  app.use( function (err, req, res, next) {

    if (err && err.status === 404) {
      return next();
    }

    res.statusCode = 500;
    res.render('404.html', {status: 500, url: req.url, error: ': ' + err.message});
  });

  /**
   * 404 page.
   */
  app.use( function (req, res, next) {
    res.statusCode = 404;
    res.render('404.html', {status: 404, url: req.url});
  });
});

如果你不想像这样读取文件,导入部分就是这一行:

require('./routes/' + file)(app);

这允许您使用之前定义的路由。

我这样做是为了保持对创建的路由的准确控制。如果您想自动化该过程,可以使用 https://github.com/visionmedia/express-resource .

这允许您执行以下操作:

var express = require('express'), 
    Resource = require('express-resource'),
    app = express.createServer();

app.resource('forums', require('./forum'));

为了自动创建指向 ./forum 中以下函数的路由:

GET     /forums              ->  index
GET     /forums/new          ->  new
POST    /forums              ->  create
GET     /forums/:forum       ->  show
GET     /forums/:forum/edit  ->  edit
PUT     /forums/:forum       ->  update
DELETE  /forums/:forum       ->  destroy

如果你想要更简单的东西,你可以这样做......

var getRoutes = [['/', controller.index], ['/post', controller.showPost]];

for (var i = 0, len= getRoutes.length; i < len; i++) {
   var path = getRoutes[i][0];
   var controller = getRoutes[i][1];
   app.get(path, controller);
}

关于node.js - expressjs路由配置对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10471694/

相关文章:

javascript - 从 url 调用 Nodejs 函数

javascript - ExpressJS多条路由同时被命中

javascript - 客户端 &lt;script src ="/socket.io/socket.io.js">&lt;/script&gt; 未找到,使用 Express-generator 生成的项目

Javascript (Node.js) - 如何读取和处理作为函数输入提供的多行?

node.js - npm install 不保存对 package.json 的依赖

node.js - Node JS 环境变量和 Heroku 部署

javascript - Kraken.js 404 和 500 中间件模板

node.js - Express.js - 如何将 base64 字符串下载为 PDF 文件?

javascript - 如何在 Node.js 中复制数组的元素?

javascript - 为什么这个函数表达式未定义?