如何使用strongloop访问postgresql数据库视图

时间:2016-03-04 19:30:46

标签: postgresql strongloop

请使用strongloop帮助访问postgresql数据库视图 我能够访问表

{"name": "test", 
   "options": {
      "idInjection": false,
      "postgresql": {
        "schema": "public",
        "table": "test_data_v"
      }
   }, 
   "properties": {

      "assetid": {
        "type": "String",
        "required": false,
        "length": 40,
        "precision": null,
        "scale": null,
        "id": 1,
        "postgresql": {
          "columnName": "asset_id",
          "dataType": "character varying",
          "dataLength": 40,
          "dataPrecision": null,
          "dataScale": null,
          "nullable": "YES"
        }
      }  
    }}

以同样的方式请建议我如何访问视图 谢谢 迪夫亚

1 个答案:

答案 0 :(得分:0)

  

我没有安装postgresql但是我试过mysql,它的工作正常。   在您的模型中,您可以直接看到此示例

在数据库中,我创建了

视图
CREATE VIEW shareviews AS
SELECT id,name
FROM share where id = 1;
  

在模型中,您可以像这个示例一样直接调用viewname

module.exports = function(Share) {

    var server = require('../../server/server');
    var ds = server.dataSources.MySQL; // use  server.dataSources.postgres;

    Share.list = function(optionalparam, cb) {     

      var sql = 'select * from shareviews';
      ds.connector.execute(sql, function(err, data)
      {
      if(err) return err;
      console.log(err);
      console.log("data",data);
        cb(null, data);
      });

    }

    Share.remoteMethod(
        'list', 
        {
          accepts: {arg: 'param', type: 'string'},
          returns: {arg: 'result', type: 'object'},
          http: {path: '/list', verb: 'get'}
        }
    );


};
  

您需要在datasource.json中设置数据源

{
  "db": {
    "name": "db",
    "connector": "memory"
  },
  "postgres": {
    "host": "localhost",
    "port": 5432,
    "database": "postgres",
    "username": "postgres",
    "password": "*******",
    "name": "postgres",
    "connector": "postgresql"
  }
}
  

然后在model-config.json中,您需要为每个分配数据源名称   模型。

那是

{
  "_meta": {
    "sources": [
      "loopback/common/models",
      "loopback/server/models",
      "../common/models",
      "./models"
    ],
    "mixins": [
      "loopback/common/mixins",
      "loopback/server/mixins",
      "../common/mixins",
      "./mixins"
    ]
  },
  "User": {
    "dataSource": "db"
  },
  "AccessToken": {
    "dataSource": "db",
    "public": false
  },
  "ACL": {
    "dataSource": "db",
    "public": false
  },
  "RoleMapping": {
    "dataSource": "db",
    "public": false
  },
  "Role": {
    "dataSource": "db",
    "public": false
  },
  "yourmodelname": {
    "dataSource": "postgres",
    "public": true
  },
  "yourmodelname": {
    "dataSource": "postgres",
    "public": true
  }
}
  

然后你可以在你的model.js或Rest调用中访问数据库(例如localhost:3000 / explorer)例如我的   型号名称Grocerylist

module.exports = function(Grocerylist) {
  Grocerylist.beforeRemote('create', function(context, user, next) {
    var req = context.req;
    req.body.date = Date.now();
    req.body.shopperId = req.accessToken.userId;
    next();
  });

  Grocerylist.complete = function(shopperId, cb) {
    Grocerylist.find({
      where: {
        purchased:false,
        shopperId: shopperId,
      }
    }, function(err, list) {
        var response;
        if (typeof list === 'undefined' || list.length === 0) {
          response = "All done shopping!"
        }
        else {
          response = "Shopping is not done.";
        }
        cb(null, response);
    });
  };
  Grocerylist.remoteMethod(
    'complete',
    {
      accepts: {
        arg: 'shopperId', type: 'string'
      },
      http: {
        path: '/complete',
        verb: 'get'
      },
      returns: {
        arg: 'complete',
        type: 'string'
      }
    }
  );
};