loopback 02

数据库连接操作,以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 .
原文地址:https://www.cnblogs.com/jinkspeng/p/4378799.html