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});

},

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');

更新:

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,},

},

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'

sails mysql_sails项目创建与常用基础操作总结相关推荐

  1. mysql怎样查表的模式_mysql常用基础操作语法(四)--对数据的简单无条件查询及库和表查询【命令行模式】...

    1.mysql简单的查询:select 字段1,字段2... from tablename; 如果字段那里写一个*,代表查询所有的字段,等同于指定出所有的字段名,因此如果要查询所有字段的数据,一般都是 ...

  2. git的项目创建和常用命令

    如果是第一次使用git,需要配置提交者的信息 git config user.name 你的目标用户名 git config user.email 你的目标邮箱名# 使用--global参数,配置全局 ...

  3. java基础知识---IO常用基础操作(二)

    九. 缓冲流 9.1 概述 缓冲流,也叫高效流,是对4个基本的FileXxx 流的增强,所以也是4个流,按照数据类型分类: 字节缓冲流:BufferedInputStream,BufferedOutp ...

  4. java基础知识---IO常用基础操作(一)

    一. File类 1.1 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 1.2 构造方法 public File(String path ...

  5. mysql常用基础操作语法(八)~~多表查询合并结果和内连接查询【命令行模式】...

    1.使用union和union all合并两个查询结果:select 字段名 from tablename1 union select 字段名 from tablename2: 注意这个操作必须保证两 ...

  6. mysql常用基础操作语法(九)~~外连接查询【命令行模式】

    1.左外连接left outer join或者left jion,outer可以省略不写,下边的右连接和全连接也一样: 左外连接的意思是,以left join左边的表中的数据为基准,即左边的表中有的必 ...

  7. mysql常用基础操作语法(四)--对数据的简单无条件查询及库和表查询【命令行模式】

    1.mysql简单的查询:select 字段1,字段2...  from tablename; 如果字段那里写一个*,代表查询所有的字段,等同于指定出所有的字段名,因此如果要查询所有字段的数据,一般都 ...

  8. mysql opti_MySQL基础操作

    查看帮助:? 关键词 如 ? trigger 一.Mysql常用基础操作 1.mysql表复制 1) create table t2 like t1;   --复制表结构,t2与t1表结构一致 2) ...

  9. python 新建文件 hdfs_python基础操作以及hdfs操作

    一.前言 作为一个全栈工程师,必须要熟练掌握各种语言...HelloWorld.最近就被"逼着"走向了python开发之路,大体实现的功能是写一个通用类库将服务器本地存储的文件进行 ...

最新文章

  1. 图像分类:13个Kaggle项目的经验总结
  2. 超牛EXCEL操作技巧,用的好,会涨工资哦
  3. 迄今最详细宇宙模型建成
  4. 网站优化的“内忧外患”需兼顾
  5. [YTU]_2478( C++习题 虚函数-计算图形面积)
  6. cinder与ceph的区别_分布式存储基础、Ceph、cinder及华为软件定义的存储方案 -
  7. Python基础知识(第六天)
  8. 华为交换机netstream配置
  9. Spring入门(1)
  10. Vue-Plugin开发插件
  11. mac os 使用记录
  12. mysql主从复制不同步案例_mysql主从复制不同步的问题
  13. ios html5 苹方字体,iOS中使用自定义字体-苹方字体
  14. 横向色差测试(LCA)—imatest
  15. 4款U盘随身操作系统推荐
  16. comsol通直流电_基于COMSOL仿真的高压直流交联聚乙烯(XLPE)电缆附件设计
  17. latex 插入bibtex 的文献。在参考文献上方多了一行序号,解决办法参考
  18. python中度数怎么表示_python中如何将华氏温度转换为摄氏温度?
  19. java 立体几何体中心点,高中数学立体几何重心考点的解题技巧_招生指南
  20. python现在版本强势英雄_当前版本中后期强势英雄排行榜,第一名后期无敌!

热门文章

  1. 软件开发除了23种设计模式,还有7个开发原则需要了解
  2. 让电影票房飞一会儿,五一换个姿势重温经典
  3. 抵制羊毛党,图计算“加持”互联网电商风控
  4. 跨湖跨仓场景下如何实现海量数据分钟级分析
  5. 都是程序员,凭什么他工资比我高,下班比我早?
  6. 华为云ModelArts 2.0全面升级,革新传统AI开发模式
  7. python replace函数后面的数字的含义
  8. MATLAB 三路频分复用通信系统
  9. MATLAB_排列组合_组合生成程序
  10. java设计连连看心得_基于Java的连连看游戏的设计与实现