数据库连接操作,以mongodb为例

  • 安装loopback-connector-mongodb

  • 修改datasources.json

//例子
{
"db": {
"name": "db",
"connector": "memory"
},
"mongodb": {
"host": "localhost",
"port": 27017,
"url": "",
"database": "development",
"name": "mongobd",
"connector": "mongodb"
}
}
  • common/models中添加数据类型,以users为例
//在`common/models/user.json`中设置

  "properties": {
"email": {
"type": "string",
"index": {
//因为这个特殊的属性值,需要添加`app.datasources.mongodb.autoupdate("users");`,这里放在server.js的boot调用中
"unique": true
}
},
"openid": {
"type": "string",
"required": true,
"index": {
"unique": true
}
},
"friends": {
"type": [
"object"
]
}
},
  • loopback提供了方便的数据库管理slc arc;
  • 管理Node.js Dependencies: 在下载包运行没问题的情况下,运行 npm shrinkwrap,生成`npm-shrinkwrap.json`文件;当新安装包之后,重新运行一次;
    • npm install --save
    • npm prune //清除多余包
    • npm shrinkwrap
    • npm shrinkwrap --dev //只检查dev中的包

models对象新增方法和调用

  • boot方法会将server中的json文件遍历一遍,其中会按照datasource.jsonmodel-config.json中的配置来加载model, 以user models为例,之后就可以通过server.models.user来获取;

  • 为了区分开发环境和运行环境加载的配置不同,可以设置datasource.production.jsonconfig.production.json,会自动在production环境下加载;

  • 给model添加方法

//在对应的models中, user.js

module.exports = function(User) {
User.ask = function() {
console.log('ask');
}; User.findByPage = function(page, count, cb) {
console.log('findByPage');
}; User.remoteMethod('findByPage', {
.........
});
}; //调用remoteMethod之后,models的方法就暴露出去来
//一般直接根据id获取数据比根据其他属性要快

var User = app.models.users;

//创建

User.create(user, function(err, user({

});

//查找; find输出的是找到的数据组成的数组;findOne输出找到的第一个对象

User.find({id: 0}, function(err, user) {
..
}); //修改, 注意这里是对findOne返回的对象进行修改,find返回的是数组 person.name = 'new'; person.save();
/person.save({"validate": true, "throws": true}, function(err, person){
....
}) //多个修改 Person.updateAll({"age":10},{"age":20}, function(err, count) { } //根据id删除数据 Person.destroyById(0 , function(err) {
....
}); //根据条件删除数据 Person.destroyAll({name:"jinks", age:23}, function(err){
....
})

设置中间件, middleware.json

  • loopback中在server/middleware.json中设置,其中定义的包括:
initial - 初始化加载
session - 关于session部分
auth - 处理认证
parse - 关于request.body.
routes - HTTP路径相关的
files - 文件处理,包括静态文件
final - 错误与错误请求处理
  • 利用before和after可以定义顺序:
initial:before
initial
initial:after
  • 一个默认的文件形式

{
"initial:before": {
"loopback#favicon": {}
},
"initial": {
"compression": {}
},
"session": {
},
"auth": {
},
"parse": {
},
"routes": {
},
"files": {
},
"final": {
"loopback#urlNotFound": {}
},
"final:after": {
"errorhandler": {}
}
}
  • 获取req.body的设置
  "parse": {
"body-parser#json": {},
"body-parser#urlencoded": {
"params": {
"extended": true
}
}
},
  • 使用morgan 后台打印访问路径
//这里设置的方式为`dev`

  "routes:before": {
"morgan": { //安装
"params": "dev"
}
}
  • 配置静态文件
  "files": {
"loopback#static": {
"params": "$!../client"
}
},

除了在middleware.json中配置之外,还可以直接在js文件中设置

server/server.js
var loopback = require('loopback');
var morgan = require('morgan');
var errorhandler = require('error-handler'); var app = loopback(); app.middleware('routes:before', morgan('dev'));
app.middleware('final', errorhandler());
app.middleware('routes', loopback.rest());
  • 配置signed cookie:
{
"cookie-parser": {
"params": "key"
}
}

config.json里的配置文件可以通过app.get('attr')获得值

调试

  • slc debug .

loopback 02的更多相关文章

  1. Hbase学习02

    第2章 Apache HBase配置 本章在“入门”一章中进行了扩展,以进一步解释Apache HBase的配置. 请仔细阅读本章,特别是基本先决条件,确保您的HBase测试和部署顺利进行,并防止数据 ...

  2. BizTalk RosettaNet解决方案之Loopback

    本教程使用 BizTalk Accelerator for RosettaNet (BTARN) 在一台计算机上模拟本组织与合作伙伴组织之间的流程实施情况. 创建本组织 “BizTalk <版本 ...

  3. Ubuntu 14.04.02 安装openvswitch-2.3.1

    Open vSwitch安装 安装好操作系统 # lsb_release -a LSB Version: core-2.0-amd64:core-2.0-noarch:core-3.0-amd64:c ...

  4. Docker系列02—Docker 网络模式

    一.Docker的四种网络模式 1.Docker 的四种网络模式: Bridge container 桥接式网络模式 Host(open) container 开放式网络模式 Container(jo ...

  5. Linux学习 - 02 使用 - Centos8 - 网络配置相关

    『Centos8 网络配置』 题外话:最近太忙,利用仅有的周末空闲时间记录点东西,草率了. 问题1:安装 Centos8.2 minimal 过程中,只是设置了 WiFi的静态IP,没有进行[以太网] ...

  6. Kotlin中变量不同于Java: var 对val(KAD 02)

    原文标题:Variables in Kotlin, differences with Java. var vs val (KAD 02) 作者:Antonio Leiva 时间:Nov 28, 201 ...

  7. Android游戏开发实践(1)之NDK与JNI开发02

    Android游戏开发实践(1)之NDK与JNI开发02 承接上篇Android游戏开发实践(1)之NDK与JNI开发01分享完JNI的基础和简要开发流程之后,再来分享下在Android环境下的JNI ...

  8. iOS系列 基础篇 02 StoryBoard 故事板文件

    iOS基础 02 StoryBoard 故事板文件 目录: 1. 故事板的导航特点 2. 故事板中的Scene和Segue 3. 本文最后 在上篇HelloWorld工程中有一个Main.storyb ...

  9. Android 学习笔记之一 “Unable to establish loopback connection”

    今天碰到一个错误:Unable to establish loopback connection,在网上找各种方法都解决不了,后来看一个帖子说是要关闭系统防火墙,尝试了下还是不行.最后是进任务管理器杀 ...

随机推荐

  1. JSTL的c:forEach标签(${status.index})

    <c:forEach>标签具有以下一些属性: var:迭代参数的名称.在迭代体中可以使用的变量的名称,用来表示每一个迭代变量.类型为String. items:要进行迭代的集合.对于它所支 ...

  2. Bootstrap弹窗插件(拟态框)关闭后回调函数

    $(function(){ $('#questionnaire').on('hidden.bs.modal',function(){ //清除缓存方法 }); }); 事件 Bootstrap 的模态 ...

  3. c语言运算符

     一.op=形式的赋值操作符 int a=0; a+=1; //等价于 a=a+1;// a*=1;  二.op=类表达式 int a=10,b=5; a/=b;//等价于a=a/b; a*=b+1; ...

  4. iOS系类教程之用instruments来检验你的app

    比较了好多关于instruments 还是发现老外写的比较牛逼.于是果断翻译过来.有能力的的可以去看英文原版,鼓励大家看原版资料远离二手教程.这里是原文   入门 为了节省大家的时间,提供一个演示的D ...

  5. javaWeb---文件上传(commons-FileUpload组件)

    FileUpload是Apache组织(www.apache.org)提供的免费的上传组件,但是FileUpload组件本身还依赖于commons组件,所以从Apache下载此组件的时候还需要连同co ...

  6. 瓦片地图与geoserver发布

    本文主要包括以下内容 TileMill生成Tile影像金字塔(.mbtiles压缩文件) Mbutil(https://github.com/mapbox/mbutil)解压缩 Apache HTTP ...

  7. 《CLR via C#》读书笔记(6)类型和成员基础

    6.1 类型的各种成员 在一个类型中,可以定义0个或者多个以下种类的成员: 常量 常量是在编译时设置其值并且永远不能更改其值的字段.使用常量可以为特殊值提供有意义的名称以代替数字文本,以使代码变得更容 ...

  8. struts标签<logic:iterate>的用法

    <logic:iterate>主要用来处理在页面上输出集合类,集合一般来说是下列之一: 1. java对象的数组 2. ArrayList.Vector.HashMap等 具体用法请参考s ...

  9. FTP的20、21端口,工作模式

    什么是FTP? FTP就是文件传输协议 File Transfer Protocol 的缩写. FTP端口号是多少? 21 FTP的端口号能改吗? 能 ftp的端口号20.21有何区别? 一个是数据端 ...

  10. Spring XML配置文件示例(二)——web.xml

    <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" ...