我刚刚进入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文件并快速查看顶部的所有可用端点。不向下滚动以找到您需要的端点。
有没有令人信服的理由不这样做,或者是一种我没有看到的更好的方式?
答案 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为您构建应用程序提供了极大的灵活性,最终取决于您的喜好 - 没有“正确”或“错误”的方法。