最近在做一个json api接口,需要匹配/api下的请求。 想要的实现是这样的:
app.path(’/api’, function(app){ // 匹配 /api/site_info app.get(’/site_info’, someAction); });
你需要Express4的Router
var apiRouter = express.Router();
apiRouter.get('/site_info', action);
app.use('/api', apiRouter);
我倾向于重复 /api
,用平铺的方式写
app.get('/api/site_info', ->)
app.get('/api/other_info', ->)
...
我的方式
app.get "/admin/:module/:action",doAction
doAction = (req,res,next)->
module = req.params.module
action = req.params.action
doSomething(module,action,req,res,next)
当然你可以扩展doSomething的写法
比如你自己的action的方法都是module_action
这样的形式的,而你的模块是yourmodule,则如下
yourmodule[module+"_"+action](req,res,next)
还有更多的扩展写法,把你的api做好配置,放到json中,然后读取json配置文件做调用。
我想知道如果平铺的话,怎么把app传到其他文件去 就是app.get如何直接在controller里直接可以写成app.get 就可以写操作了。
我看到一种方法是在app.js里把app声明成global,有没有什么更好的方法?
哈哈 喜欢coffee… ^_^ 不过我一般写成
app.get '/api/site_info', ->
其实 你可以用下面这种方式
server.js文件中
app = express()
require('./routes')(app);
在route.coffee文件中
module.exports = (app) ->
require('./routes/api1')(app)
require('./routes/api2')(app)
在routes/api1.coffee文件中
module.exports = (app) ->
app.route('/api1/xxx')
.get(controller1.balabala)
.post(controller1.lalala)
app.route('/api1/ooo')
.get(controller1.adfasfdas)
.post(controller1.ooop)
在routes/api2.coffee文件中
module.exports = (app) ->
app.route('/api2/xxx')
.get(controller2.balabala)
.post(controller2.lalala)
app.route('/api2/ooo')
.get(controller2.adfasfdas)
.post(controller2.ooop)
这样其实也可以很轻松进行接口定义和管理。文档甚至都可以直接写到route对应的js文件里面
你所有的controller是通过exports对外暴露接口…当然就可以接受参数了… 那既然能传参给controller… 那当然也可以吧app传进去了啊。所以 不应该是把app声明成global,而是应该通过参数传递进去。不过话说…不应该在controller直接操作app吧…