1. 程式人生 > >Sails框架知識點

Sails框架知識點

1、全域性安裝:cnpm install -g sails
2、建立專案:sails new sails_shop,選2
    或者:
        sails new sails_shop --fast,選2
        cd sails_cqwu
        cnpm install 注:安裝依賴包
3、啟動專案:sails lift
4、使用自動路由:修改config->blueprints.js->actions: true
5、建立路由控制:
  sails generate controller main index
  sails generate controller admin admin admin_login change_pwd send send_shop shop_add
  sails generate controller users detail
6、自定義路由:config->routes.js
  '方式 請求名':{響應方式:'路由'} 注:方式省略表示ALL,action方式可簡寫為字串
    '/': { view: 'index' },
    'GET /users': {action: 'users/logout'},
    也可:'GET /users': 'users/logout',
    '/users/login': { action: 'users/login' },
    'POST /users/zhuce': { view: 'users/zhuce' }
    注:action:訪問路由控制器裡的action
        view:直接渲染模板資料夾的模板檔案
7、對主頁模板進行渲染:config->routes.js
    '/': function (req,res) {
      req.session.logined="bbbbb";
      res.view('index',{title:req.session.logined})
    },
8、主頁渲染方式2
  在config->routes.js中修改根路由:
  形如:  '/': 'UsersController.index',
  在UsersController.js中新增主頁路由:
  形如:
    index: async function (req, res) {
        res.view('index',{title:99});
    },
9、前臺訪問:http://localhost:1337
10、修改埠:config->local.js
    module.exports = {
      port:1338
    }
11、不使用預設佈局:config->views.js
    layout: false
12、使用自定義的佈局檔案:在路由或控制器的渲染中新增屬性layout
    req.session.logined="bbbbb";
    res.view('index',{layout: 'layouts/manage',title:req.session.logined})
13、連線資料庫
    (1).cnpm install sails-mysql --save
    或者cnpm install sails-mysql --save-exact
    cnpm install sails-mongo --save
    (2).<!--config/datastores.js-->
      module.exports.datastores = {
        default: {
          adapter: 'sails-mysql',
          url: 'mysql://user:

[email protected]:3306/my_db_name',
        },
        mongoDb: {
          adapter: 'sails-mongo',
          url: 'mongodb://root:@localhost:27017/shop'
        }
      };
    (3).<!--config/models.js-->
    schema: true,//嚴格匹配資料表的模式
    migrate: 'alter',//在儘量不丟失資料的情況下,允許sails修改表的結構
    attributes: {
        createdAt: { type: 'number', autoCreatedAt: true, },
        updatedAt: { type: 'number', autoUpdatedAt: true, },
        id: { type: 'number', autoIncrement: true, }
        //id: { type: 'string', columnName: '_id' } 注:mongodb使用
  }
    //允許sails自動新增三個欄位
14、建立model(根下)
  sails generate model manage
  sails generate model shop
  sails generate model users
  sails generate model admin
15、修改model檔案
  開啟Admin.js,新增形如下表屬性或結構:
    attributes: {
      zh: {type: 'string', required: true},
      nc: {type: 'string', required: true},
      pwd: {type: 'string', required: true}
    }
  //詳細設定參見:資料庫表各欄位屬性設定.html
16、應用model,典型應用在控制器或資料操作模組下:
  新增:
    let rows=await Admin.create({zh: '
[email protected]
', nc: '六六六1', pwd: '6661'}).fetch();
    console.log(rows);
    return res.send('ok');
    自動接收資料並插入表中方式:
      let reg_info=req.allParams();
      console.log(reg_info);
      let row=await Manage.create(reg_info).fetch();

  新增多條資料:
      let data=[
        {zh: '[email protected]', nc: 'aaaa1', pwd: '6661'},
        {zh: '[email protected]', nc: 'bbbb1', pwd: '6661'},
        {zh: '[email protected]', nc: 'cccc1', pwd: '6661'}
      ];
      let rows=await Admin1.createEach(data).fetch();
      console.log(rows);
      return res.send('ok');

  查詢:
    let rs = await Admin.find(查詢條件);
    console.log(rs);
    return res.send('ok');
    條件設定見:https://sailsjs.com/documentation/concepts/models-and-orm/query-language

  更新:
    let rows=await Admin1.update({zh: '[email protected]'}, {nc: '我是改過的', pwd: '333'}).fetch();
    console.log(rows);//返回一個數組,哪怕是一條資料,是被更新的資料
    return res.send('ok');

  刪除:
    let rows=await Admin1.destroy({id: 5}).fetch();
    console.log(rows);//返回一個數組,哪怕是一條資料,是被刪除的那條資料
    return res.send('ok');

  分頁:
    let rs = await Admin.find().skip(2).limit(1);
    console.log(rs);
    return res.send('ok');

  統計記錄數:
    let rs = await Admin.count();
    console.log(rs);//返回數字
    return res.send('ok');

  排序:
    let rs = await Admin.find().sort('id desc');
    console.log(rs);
    return res.send('ok');
17、應用攔截器
  (1)在某個路由或操作中加入登入資訊:如:req.session.userId={id:5,nc:'aaa'};
  登出的時候把這個session刪掉
  (2)在api/policies/新建策略檔案形如:isLoggedIn.js
    module.exports = async function (req, res, proceed) {
      if (req.session.userId) {
        return proceed();
      }
      return res.redirect('/users/login');
    };
  (3)在config/policiesl.js檔案中修改是否應用策略
    全域性方式:
      module.exports.policies = {
        '*': 'isLoggedIn',
        'users/index': true,
        'users/login': true
      }
    控制器方式:
      module.exports.policies = {
        UserController: {
          '*': 'isLoggedIn',
          'delete': 'isAdmin',
          'login': true
        }
      }
      注:一個操作要用多個策略用[],如:['isLoggedIn', 'isAdmin']
18、檔案上傳
  upload: function (req, res) {
    req.file('image').upload(function (err, files) {
      if (err)
        return res.serverError(err);
      let path=files[0].fd.split('\\');
      path=path[path.length-1];
      console.log(path);//獲取的檔案預設放在.tmp/uploads下,這個名字應存一份到資料庫
      return res.json({
        message: files.length + ' file(s) uploaded successfully!',
        files: files
      });
    });
  }
  傳到自定義資料夾:
    req.file('imgsrc').upload(
      {
        dirname: require('path').resolve(sails.config.appPath, 'assets/images')
      },
      function (err, files) {
        if (err)
          return res.serverError(err);
        let path=files[0].fd.split('\\');
        path=path[path.length-1];
        console.log(path);//獲取的檔案放在assets/images下,這個名字應存一份到資料庫
        return res.json({message: uploadedFiles.length + ' file(s) uploaded successfully!'});
    });
18、同時應用多個數據源
    (1).config->datastores.js
        module.exports.datastores = {
            default: {
              adapter: 'sails-mysql',
              url: 'mysql://root:[email protected]:3306/cqwu',
            },
            mongoDb: {
              adapter: 'sails-mongo',
              url: 'mongodb://root:@localhost:27017/shop'
            }
        };
    (2).config->models.js
        module.exports.models = {
          schema: false,//無模式,可支援多種資料來源
          migrate: 'alter',//允許系統根據情況修改結構
          attributes: {
            // createdAt: { type: 'number', autoCreatedAt: true, },
            // updatedAt: { type: 'number', autoUpdatedAt: true, },
            id: {type: 'number', autoIncrement: true,},
            // id: { type: 'string', columnName: '_id' }
          },
          dataEncryptionKeys: {
            default: 'Yinwzamuxr9wTGiSTc7Eox31f8idirOavmpaB4UfycU='
          },
          cascadeOnDestroy: true
        };
    (3).api->models->UserTabe.js //userTable為表或集合名稱
        使用預設介面卡default:
        module.exports = {
            attributes: {
              zh: {type: 'string', required: true},
              nc: {type: 'string', required: true},
              pwd: {type: 'string', required: true}
            }
        };
        使用mongoDb介面卡:
        module.exports = {
            datastore: 'mongoDb',
            attributes: {
              id: {type: 'string', columnName: '_id'},
              zh: {type: 'string', required: true},
              nc: {type: 'string', required: true},
              pwd: {type: 'string', required: true}
            },
        };