繁体   English   中英

Express JS中具有不同功能的动态路由

[英]Dynamic routes with different functions in express js

我认为我的代码中有很多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);
    }
});

这行得通,但也大大降低了我的应用程序速度。 还有其他解决方案不会影响我的应用程序性能吗?

谢谢

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

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

我通常使用这样的设置:

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,并且设置非常好!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM