我刚开始用express 4学习node.js。我已经阅读了一些书籍和教程,我还从git克隆了一些示例应用程序,但我仍然有一个非常基本的问题,我应该遵循哪种练习来编写路由(或控制器)?
有些人定义app.js中的所有路径,并导出控制器中的所有功能:
app.js
....
var homeController = require('./controllers/home');
var userController = require('./controllers/user');
....
app.get('/', homeController.index);
app.get('/login', userController.getLogin);
app.get('/logout', userController.logOUT);
app.get('/doStuff', userController.doStuff);
然后在controllers / user.js
中 exports.getLogin = function(req, res) {
//logic...
});
exports.logout = function(req, res) {
//logic...
});
exports.doStuff = function(req, res) {
//logic...
});
另一种方式就像快速发电机一样: app.js
...
app.use('/users', users);
...
控制器/ users.js
....
router.get('/login', function(req, res, next) {
//logic...
});
router.get('/logout', function(req, res, next) {
//logic...
});
router.get('/doStuff', function(req, res, next) {
//logic...
});
module.exports = router;
其他更像this proposal
的动态有任何技术差异吗?我应该遵循哪种模式?
答案 0 :(得分:2)
这完全是优惠的。任何有效的模式都可能在这里有效。 Express路由器使事情变得非常好并且易于设置。我个人更喜欢为每个顶级路线创建一个目录,为第二个级别创建文件,为第三个级别创建导出。以下是我如何为一组API路线做好准备的示例。
目录:
routes/
index.js <- master route manifest
api/
index.js <- api routes manifest
books.js
authors.js
landing-pages/
index.js
awesome-deal.js
路线清单:
// routes/index.js
var router = require('express').Router();
router.use('/api', require('./api'));
router.use('/landing', require('./landing-pages'));
module.exports = router;
API路线清单:
// routes/api/index.js
var router = require('express').Router();
router.use('/books', require('./books.js'));
router.use('/authors', require('./authors.js'));
module.exports = router;
实体端点:
// routes/api/books.js
var router = require('express').Router();
var db = require('mongoose-simpledb').db;
router.get('/get/:id', function (req, res) {
var id = req.param('id');
db.Book.findOneById(id, function (err, book) {
if (err) throw err;
res.json(book);
});
});
router.post('/new', /* etc... */);
return router;
然后在我的app文件中,我只设置了顶级路线:
// app.js
/* express setup.... */
app.use('/', require('./routes'));