LoopBack 操作记录

tags: LoopBack, MySQL

什么是LoopBack

请看官方文档

Get Started

继续查看Getting started

自定义MySql连接

自定义table名字

在模型的json文件中common/model/category.json添加Mysql的配置

1
2
3
4
5
6
7
8
{
"name": "Category",
...
"mysql": {
"table": "custom_category" // 自定义的表名
}
...
}

更多Model的Json定义参考Model definition JSON file

自定义table列名

同样在模型定义的json文件中,common/model/category.json找到properties模块的配置,为需要自定义表列名的属性下添加msql配置信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"name": "category",
...
"properties": {
...
"title": {
"type": "String",
"required": true,
"mysql":{
"columnName":"question_content",
"dataType":"VARCHAR"
}
},
...
},
...
}

还有其他类型类型的对应关系,可以看MySQL connector

自定义请求方法(Remote Method)

loopback默认提供了许多方法,可以方便的访问到服务端的资源,这里列出一些常用的,更多的方法可以参考文档

method path verb
find / GET
findById /:id GET
findOne /findOne GET
deleteById /:id DELETE
count /count GET
exists /:id/exists GET
exists /:id HEAD
create / POST
upsert / PUT
exists /exists GET
exists /exists GET

这些方法的定义和注册都可以在/node_modules/loopback/lib/persisted-model.js文件中看到。如find

1
2
3
4
5
6
7
8
9
10
PersistedModel.find = function find(filter, cb) {
throwNotAttached(this.modelName, 'find');
};
setRemoting(PersistedModel, 'find', {
description: 'Find all instances of the model matched by filter from the data source.',
accessType: 'READ',
accepts: {arg: 'filter', type: 'object', description: 'Filter defining fields, where, include, order, offset, and limit'},
returns: {arg: 'data', type: [typeName], root: true},
http: {verb: 'get', path: '/'}
});

参照上面的方法我们可以自定义一些需要的方法

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

我们可以通过GET /api/persons/greet?msg=John获得如下的返回

1
Greetings... John

关于自定义方法的参数说明可以参考详细描述

自定义返回数据

loopback提供了一系列方法可以改变资源返回,比如我需要将请求到的资源列表包装在一个对象的list下返回。

1
2
3
4
5
6
7
8
9
Category.afterRemote('find', function(ctx, remoteMethodOutput, next) {
if (ctx.result && Array.isArray(remoteMethodOutput)) {
ctx.result = {
"list": remoteMethodOutput
}
}
next();
});
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
自定义返回结果前
[
{...},
{...},
{...},
{...}
]
自定义返回结果后
{
"list" : [
{...},
{...},
{...},
{...}
]
}

更多关于请求资源的逻辑控制,请参考Adding logic to models

Comments