sails 配置waterline orm 進行redis資料讀寫

jaysun發表於2017-02-10

前言

針對剛剛安裝好的sails,內建了一個開發環境下的localdb,所有的相關create操作,都會,在.tmp目錄下會生成一個隱藏檔案localDiskDb.db

config/connections.js檔案中有描述,本地儲存只是用於開發環境的。

/***************************************************************************
  *                                                                          *
  * Local disk storage for DEVELOPMENT ONLY                                  *
  *                                                                          *
  * Installed by default.                                                    *
  *                                                                          *
  ***************************************************************************/
  // localDiskDb: {
  //   adapter: `sails-disk`
  // },

所以我們要配置一個線上的儲存。那就鎖定redis咯。參照github的專案,進行安裝
https://github.com/balderdashy/sails-redis

安裝配置

具體的安裝命令為

npm install sails-redis

配置

將下面的連結配置放到config/connection.js

redis: {
    adapter: "sails-redis",
    port: 6379,
    host: `localhost`
  }

config/models.js中的connection修改為redis

// connection: `localDiskDb`,
  connection: `redis`,

注意:config/models.js中的migrate: `safe`,配置項很關鍵,如果為drop的話,那麼每次重新啟動的時候,資料來源都會被重置(資料丟失)。所以這裡我改成了safe

操作

建立資料

在控制器中直接寫

module.exports = {
    /**
     * 第一個初始化方法
     * @param  {[type]} req [description]
     * @param  {[type]} res [description]
     * @return {[type]}     [description]
     */
    create:function(req, res) {
        // 建立了一條記錄
        User.create({name:`lucy`,age:19}).exec(function(err,records) {
            return res.json(records);
        });
    },
    // 列出資料
    list:function(req, res) {
        User.find({where:{
            name:`lucy`
        },sort:`createdAt desc`}).exec(function(err, records) {
            return res.json(records);
        })
    }
};

查詢結果

[
{
"name": "lucy",
"age": "19",
"createdAt": "2017-02-10T11:21:41.007Z",
"updatedAt": "2017-02-10T11:21:41.007Z",
"id": 7
},
{
"name": "lucy",
"age": "19",
"createdAt": "2017-02-10T11:21:40.807Z",
"updatedAt": "2017-02-10T11:21:40.807Z",
"id": 6
},
{
"name": "lucy",
"age": "19",
"createdAt": "2017-02-10T11:21:40.507Z",
"updatedAt": "2017-02-10T11:21:40.507Z",
"id": 5
},
{
"name": "lucy",
"age": "19",
"createdAt": "2017-02-10T11:21:38.414Z",
"updatedAt": "2017-02-10T11:21:38.414Z",
"id": 4
},
{
"name": "lucy",
"age": "19",
"createdAt": "2017-02-10T11:21:33.802Z",
"updatedAt": "2017-02-10T11:21:33.802Z",
"id": 3
}
]

總結

waterline 的orm操作,將redis進行重新封裝後,依然感覺像是操作mongo的文件型別的nosql。

目前還沒有學到相關直接操作redis的地方,而且針對connections目前看來不能同時支援多個資料來源的操作。

相關文章