Express JS - 对路由和中间件使用匿名函数

时间:2016-03-01 18:35:50

标签: javascript node.js express

我刚刚进入Express,并注意到我看到的路由和中间件的每个例子都使用匿名函数。以下是快递网站的一个例子:

router.get('/user/:id', function(req, res){
  res.send('user ' + req.params.id);
});

我想知道是否有一个原因我没有看到任何人使用函数声明。像这样:

router.get('/user/:id', getUserById);

function getUserById(req, res) {
  res.send('user ' + req.params.id);
}

我的问题很大程度上是因为我对John Papa角度风格指南的体验。在其中,他建议你使用吊装给你的优势,如下所示: https://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md#style-y053

他基本上主张在顶部为角度服务定义“API”,这样您就可以快速查看服务的可访问成员,而无需通过实现。如果使用函数声明,我可以看到与路径相同的潜力。您可能有这样的用户路由文件:

router.get('/user/:id', getUserById);
router.get('/users', getAllUsers);
router.delete('/user', deleteUser);
router.put('/user/:id', updateUser);

function getUserById(req, res) {
  res.send('user ' + req.params.id);
}

function getAllUsers(req, res) {
  // implement get all users
}

function deleteUser(req, res) {
  // implement delete user
}

function updateUser(req, res) {
  // implement update user
}

这样,当您在视图中并且无法准确记住匹配特定路径时所需的URL时,您可以打开users.js文件并快速查看顶部的所有可用端点。不向下滚动以找到您需要的端点。

有没有令人信服的理由不这样做,或者是一种我没有看到的更好的方式?

1 个答案:

答案 0 :(得分:1)

这是Express的一种MVC样式 - 我通常这样做的方式如下(对于示例用户API):

文件夹布局:

app.js
controllers/
    usersController.js
models/
    User.js
routes/
    userRoutes.js

app.js

var userRoutes = require('./routes/userRoutes')
// Tell express to use the userRoutes for all requests starting'/user'
app.use('/user', userRoutes')

/routes/userRoutes.js

var express = require('express')
var router = express.Router()
var userController = require('../controllers/userController.js')

// localhost:PORT/user
router.get('/', userController.getAll)
router.get('/:id', userController.getById);

/controllers/userController.js

var User = require('../models/User.js')

exports.getAll = (req, res, next) => {
 // find all users
  User.find({}, ...)
}

exports.getById = (req, res, next) => {
  // req.params.id, then find by ID
}

这只是一个示例,如果您愿意,您可以只使用单个路径文件,或者您可以为userController创建一个对象,然后根据需要导出它。

Express为您构建应用程序提供了极大的灵活性,最终取决于您的喜好 - 没有“正确”或“错误”的方法。