最近在做一个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,用平铺的方式写
/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,则如下
module_action
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吧…
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
你需要Express4的Router
我倾向于重复
/api,用平铺的方式写我的方式
当然你可以扩展doSomething的写法 比如你自己的action的方法都是
module_action这样的形式的,而你的模块是yourmodule,则如下还有更多的扩展写法,把你的api做好配置,放到json中,然后读取json配置文件做调用。
我想知道如果平铺的话,怎么把app传到其他文件去 就是app.get如何直接在controller里直接可以写成app.get 就可以写操作了。
我看到一种方法是在app.js里把app声明成global,有没有什么更好的方法?
哈哈 喜欢coffee… ^_^ 不过我一般写成
其实 你可以用下面这种方式
server.js文件中
在route.coffee文件中
在routes/api1.coffee文件中
在routes/api2.coffee文件中
这样其实也可以很轻松进行接口定义和管理。文档甚至都可以直接写到route对应的js文件里面
你所有的controller是通过exports对外暴露接口…当然就可以接受参数了… 那既然能传参给controller… 那当然也可以吧app传进去了啊。所以 不应该是把app声明成global,而是应该通过参数传递进去。不过话说…不应该在controller直接操作app吧…