Express JS – 使用路由和中间件的匿名函数

我刚刚进入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的angular度风格指南的经验。 其中,他build议你使用提升你的优势,如下所示: https : //github.com/johnpapa/angular-styleguide/blob/master/a1/README.md#style-y053

他基本上主张在顶部为angular度服务定义“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 } 

这样,当您处于视图中,并且无法准确logging匹配特定路由的url时,可以打开users.js文件并快速查看顶部的所有可用端点。 没有滚动查找您需要的端点。

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

这是一个快速的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创build一个对象,然后根据需要导出它。

快递为您提供了很大的灵活性,以便您构build您的应用程序,最终取决于您的select – 没有“正确”或“错误”的方法。