carcass 框架是构建在express connect等模块上的一个restfull api 框架,封装了诸如 deferred等一些非常有用的框架,下面介绍如何使用carcass来快速建立一个node api server。
####0.扩展
carcass包含有几个很重要的特性
-mixable与mixin
例如
var obj = {};
carcass.mixable(obj);
obj.mixin({
start: function() {
}
})
mixable给一个对象添加mixin方法 mixin类似于一个扩展继承的概念
-register
obj.mixin(carcass.proto.register);
obj.register(path.resolve(__dirname, 'lib'));
通过register 我们就可以通过obj的属性来引用lib文件下的文件
-deferred
deferred 是JavaScript异步变同步的框架,将每步操作变成一个promise.
var deferred = carcass.deferred;
function save() {
var def = deferred;
/*
*Do something then resolve or reject.
*/
return def.promise;
}
具体使用方法可以看deferred的文档.
####1.结构 carcass 主要的特性就是帮助开发者有效的控制项目的结构,所以引入了一个很重要的特性
carcass.register 对于我自己来说一个应用的结构可能会像这样的
|--api
| |--applications
| | |--auth.js
| | |--user.js
| | |--...
| |--lib
| | |--utils.js
| |--index.js
|
|--auth
| |--lib
| | |--auth.js
| | |--user.js
| |--test
| | |--...
| |--index.js
| |--Makefile
|--index.js
.....
如何快速得到api内的各个独立的api 一般的做法是类似这种
{
var api = module.exports= {
auth: require('applications/auth'),
user: require('applications/user')
}
}
使用carcass.register 我们就可以很简单的使用去export 一个api对象
var path = require('path');
var carcass = require('carcass');
var api = module.exports = carcass.mixable({
registerOptions: {
noRecursive: true,
noIndex: true
}
});
api.mixin(carcass.proto.register);
api.register(path.resolve(__dirname, 'applications'));
很方便的直接可以使用api.auth 或者api.user ,而且以后增删文件 无需更改index.js 如果有子文件夹还可以使用api.sub.sub.js这种格式,只要将noRecursive移出即可 注: carcass 内部是通过文件的路径来添加属性的 noRecursive 是否遍历子文件夹 noIndex 是否包含index.js
2.代码
写一个user的api
在root/api/applications/
目录下添加一个user.js
var carcass = require('carcass');
var app = module.exports = carcass.express();
app.get('/', function(req, res, next) {
return res.json(200, {hi: 'carcass'});
});
app.get('/:id', function(req, res, next) {
return res.json(200, {id: req.params.id});
});
app.get('/test', function(req, res, next) {
return next(carcass.httpError(501));
});
和express 的api书写方式一样 在root/ 下添加一个index.js
var http = require('http');
var carcass = require('carcass');
var app = carcass.express();
var api = require('./api');
app.use('/user', api.user);
http.createServer(app).listen(3000);
运行node index.js
访问 http://127.0.0.1:3000/user 会返回 {hi: 'carcass'}
一个简单的api server 就搭建成功了
原文在我的博客上 http://www.xeodou.me/2013/09/09/carcass-api-server/