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 users list 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

某個模板文件不使用布局文件方法:

res.view({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:password@localhost: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自動添加三個字段

4.讓某個集合model有單獨的模式,常用於mongodb集合

如:api/models/Normal.js

module.exports = {
    schema: false,
    attributes: {
    }
};

14、創建model(根下)

sails generate model product 注:實際上創建表或集合

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: 'lcjtmp6@163.com1', 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: 'lcjtmp1@163.com1', nc: 'aaaa1', pwd: '6661'},
    {zh: 'lcjtmp2@163.com1', nc: 'bbbb1', pwd: '6661'},
    {zh: 'lcjtmp3@163.com1', 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: 'lcjtmp6@163.com'}, {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/新建策略文件形如:isLogin.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 = {
    '*': 'isLogin',
    'users/index': true,
    'users/login': true
  }

控制器方式:

  module.exports.policies = {
    UserController: {
      '*': 'isLogin',
      'delete': 'isAdmin',
      'login': true
    }
  }

注:一個操作要用多個策略用[],如:['isLogin', '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('avatar').upload(
  {
    dirname: require('path').resolve(sails.config.appPath, 'assets/upload')
  },
  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:123@localhost: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}
    },
};

19.項目移植

sails new myapp --fast

選2,
進入myapp文件夾,將原項目中自己做的部分對應考入新路徑中

cd myapp
cnpm install

啟動數據庫

sails lift

20.前后端分離式跨源訪問方式。
在api/policies/下新建策略文件如:allow.js,內容如下:

module.exports = async function (req, res, proceed) {
  res.header("Access-Control-Allow-Origin", "http://localhost:8080");
  res.header("Access-Control-Allow-Credentials","true");
  return proceed();
}

然后再在config/policies.js文件中添加內容即可

'*': 'allow'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM