LoopBack自定义接口

为什么要自定义

loopback虽然给我们提供了一套全面的API,但是由于使用的灵活性,有时候不能满足我们所有的需求。比如我在用户表中增加了userType字段,然后通过这个字段区分三种用户。而我希望对某一类用户设置权限,这时候直接在user表设置权限就比较困难,我们可以新增一个自定义方法,给这个方法设置ACL。
教程索引:(持续更新)
loopback中文教程

皓眸大前端开发学习

转载请注明出处:http://www.haomou.net/2015/03/23/2015_loopback_extend/

基础认识

好几天没有写博客了,虽然看着博客的访问量蹭蹭的涨,内容也需要不断的更新,由点到面的扩展。这里不扯淡了,首先我们需要清楚loopback的配置文件结构,在server目录下model-config.json中有这么一段:

1
2
3
4
5
6
7
8
9
{
"_meta": {
"sources": [
"../common/models",
"./models",
"./node_modules/loopback-component-passport/lib/models"
]
},
......

这个是什么呢?这个是指明了loopback数据模型所在的目录。我们自己定义的模型一般放在common下,

1
2
../common/models 存放自己定义数据模型
./node_modules/loopback-component-passport/lib/models loopback内置数据模型

需要明确的是数据模型之间是可以继承的。这里我们不详细说,大家可以自己看文档。

在models目录结构中,一个数据模型的目录结构是这样的:

1
2
3
-models
----AAA.json 数据模型AAA配置文件
----AAA.js 数据模型AAA扩展接口文件

所以通过AAA.js我们可以自定义扩展的借口API

远程接口

我们都知道loopback已经内置了rest的api接口,如果我们想自己定义一个rest接口怎么办?其实loopback已经为我们想好了,很简单,使用loopback提供的远程方法remote method,详见官网:http://docs.strongloop.com/display/public/LB/Remote+methods?src=search&src=search

我们可以自己定义远程接口,例如扩展person数据模型的接口:
common/models/person.js

1
2
3
4
5
6
7
8
9
10
11
12
module.exports = function(Person){
Person.greet = function(msg, cb) {
cb(null, 'Greetings... ' + msg);
}
Person.remoteMethod(
'greet',
{
accepts: {arg: 'msg', type: 'string'},
returns: {arg: 'greeting', type: 'string'}
}
);
};

然后我们可以使用post方式访问这个api

1
2
3
4
POST /api/people/greet
with data {"msg": "John"}
will return:
Greetings... John!

我们主要用到了remoteMethod这个方法,

1
model.remoteMethod(requestHandlerFunctionName, [options])

遇到的坑坑

cb is not a function

运行时总是报错,说扩展方法中的cb回调函数没有定义,后来查文档得知这个参数是loopback自动传递的,但是必须要在remoteMethod中定义acceps参数,否则不会传递cb这个回调函数。

返回err

注意,loopback自动传递的cb函数,有两个参数。

1
cb(err,data)

第一个参数默认是err信息,填到err字段的键值,第二个参数根据returns的定义填写到相应字段键值。

谢谢!

转载请注明出处:http://www.haomou.net/2015/03/23/2015_loopback_extend/

欢迎关注皓眸学问公众号(扫描左侧二维码),每天好文、新技术!任何学习疑问或者工作问题都可以给我留言、互动。T_T 皓眸大前端开发学习 T_T