zoukankan      html  css  js  c++  java
  • 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 .
  • 相关阅读:
    Dockerfile简介及基于centos7的jdk镜像制作
    docker数据卷(Data Volumes)
    docker入门及常用命令
    Failed to start bean ‘org.springframework.kafka.config.internalKafkaListenerEndpointRegistry
    dubbo服务启动报:qos-server can not bind localhost:22222s
    Dubbo服务调用Failed to invoke the method错误记录
    java8-list转Map
    git remote: HTTP Basic: Access denied 错误解决办法
    SSH整合(二)
    SSH整合
  • 原文地址:https://www.cnblogs.com/jinkspeng/p/4378799.html
Copyright © 2011-2022 走看看