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:[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自動添加三個字段
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: '[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/建立政策檔案形如: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:[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}
},
};
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'