N-Blog的教程,和网上大多数主流教程,Router和Controller紧密耦合。虽然Router也是Controller的一部分,但是这样看怎么样也不是很优雅。
所以一般而言,都会怎么做?没有一个清晰的路由表很不爽的。
我目前的做法是将代码导出模块,然后在路由表传入。
这是routers/index.js
var Auth = require('../controller/authorization'),
ArticleHandler = require('../controller/articles');
module.exports = function(app) {
// router of index
app.get('/', function(req, res){res.end("Hello world!")});
// router of /article
app.get('/articles', ArticleHandler.list_articles);
app.post('/articles', Auth.auth, ArticleHandler.add_article);
// router of /article/(.*)
app.put('/articles/:id', Auth.auth, ArticleHandler.modify_article);
app.get('/articles/:id', ArticleHandler.get_a_article);
app.delete('/articles/:id', Auth.auth, ArticleHandler.remove_article);
// router of /api-auth
app.post('/api-auth', Auth.get_token);
// router of /tags
app.get('/tags', function(req, res){});
// todo
};
然后controller里有articles.js和authorization.js。
以articles.js为例,里面是一个Article类,然后暴露Article的接口。
var Article = require('../models/articles'),
User = require('../models/users'),
Auth = require('authorization');
function ArticleHandler() {
//Article Handlers
}
ArticleHandler.list_articles = function(req, res) {
// some statements
};
// Others
module.exports = ArticleHandler;
感觉比较蛋疼的。
不知你们的通用做法是?
另外callback真是忧伤,让写出来的代码很脏,也不算优雅。
不过令人欣慰的是有中间件这个东西。要不然更蛋疼了。
没人鸟我=-=
乍一看这么写并没有什么不好的啊?不知道你哪里不满意~
callback的嵌套问题,可以交个promise来解决吧~
controller这个东西除了组织代码没看出来有什么用,组织代码可以用命名空间或者子目录, web框架只需要router,handle就可以了
一个handle一个文件,get/post/delete都是里面的方法handle多了可以分子目录存放,route独立出来做配置文件,就一个{’/xxx’:'ooHandle}就行了象express还有楼主这种路由与代码混在一起的,重构起来很麻烦