Node 框架之sails |
您所在的位置:网站首页 › sails的音标 › Node 框架之sails |
sails其实是内置的express,所以如果你之前使用的是express,那么你将很快的入门该框架,因为sails基本的语法同express相同,只不过sails集成了很多其他工具,使得我们开发更简单。 今天我只是记录一下它的使用方法,方便日后查看。 1、全局安装: cnpm install -g sails2、创建项目: sails new sails_shop,选2 或者: sails new sails_shop --fast,选2 cd sails_cqwu cnpm install //注:安装依赖包3、启动项目: sails lift4、使用自动路由: 修改config->blueprints.js->actions: true5、创建路由控制: sails generate controller users zhuce login logout//这个users有login、logout等功能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' } 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、连接数据库(这里我连接的是mongodb) cnpm install sails-mysql --save --save-exact cnpm install sails-mongo --save //--save 把安装的模块写进package.json 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' } }; 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 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(); await//解决异步问题 .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'); 删除: //删除对象中某个成员delete login_data.yzm 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//允许l访问ogin } }注:一个操作要用多个策略用[],如:['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('avatar').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: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} }, };mongodb可以自动创建数据库,但是mysql数据库不能自动创建,需要手动创建数据库
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |