carcass 快速创建api server 的另一种选择
发布于 11 年前 作者 xeodou 4469 次浏览 最后一次编辑是 8 年前

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/

回到顶部