快速js中具有不同功能的动态路由

时间:2015-03-27 07:30:40

标签: javascript node.js express

我认为我的代码中有router.get个函数,可以简化为单个switch-case函数。这是我尝试过的:

function handlerA(req, res) {}

function handlerB(req, res) {}

var routes = {
    '/url-one': handlerA,
    '/url-two': handlerB
}

router.get('/*', function(req, res) {
    var url = req.url;

    if (routes[url]) {
        routes[url](req, res);
    }
});

这样可行,但也会大大减慢我的申请速度。有没有其他解决方案不会影响我的应用程序的性能?

由于

2 个答案:

答案 0 :(得分:0)

您是否有理由不想使用router.get功能?我猜想express.js在内部执行与你正在做的相同的逻辑。您只是用处理程序替换get函数。

如果您在多条路线之间使用类似的逻辑,则可能值得抽象。

答案 1 :(得分:0)

我通常使用这样的设置:

app.js
routes.js
api/
  user/
    index.js
    user.controller.js
    user.model.js
  image/
    index.js
    image.controller.js
    image.model.js

<强> /api/user/index.js:

var express = require('express');
var controller = require('./user.controller');

var router = express.Router();

router.get('/', controller.index);
router.post('/', controller.create);

module.exports = router;

<强> /api/user/user.controller.js:

var User = require('./user.model');

exports.index = function(req, res) {
  // Show list of users
};

exports.create = function (req, res, next) {
  // Create user
};

<强> /routes.js:

module.exports = function(app) {

  // Insert routes below
  app.use('/api/users', require('./api/user'));
  app.use('/api/images', require('./api/image'));

  // All undefined asset or api routes should return a 404
  app.route('/:url(api|auth|components|app|bower_components|assets)/*')
   .get(errors[404]);

  // All other routes should redirect to the index.html
  app.route('/*')
    .get(function(req, res) {
      res.sendfile(app.get('appPath') + '/index.html');
    });
};

最后, /app.js:

// Set default node environment to development
process.env.NODE_ENV = process.env.NODE_ENV || 'development';

var express = require('express');
var mongoose = require('mongoose');
var config = require('./config/environment');

// Connect to database
mongoose.connect(config.mongo.uri, config.mongo.options);

// Populate DB with sample data
if(config.seedDB) { require('./config/seed'); }

// Setup server
var app = express();
var server = require('http').createServer(app);
require('./config/express')(app);
require('./routes')(app);

// Start server
server.listen(config.port, config.ip, function () {
  console.log('Express server listening on %d, in %s mode', config.port, app.get('env'));
});

// Expose app
exports = module.exports = app;

大部分直接来自Yeoman Generator Angular-Fullstack,它有一个真的很好的设置!