Node 框架之sails

您所在的位置:网站首页 sails的音标 Node 框架之sails

Node 框架之sails

2023-07-04 13:23| 来源: 网络整理| 查看: 265

sails其实是内置的express,所以如果你之前使用的是express,那么你将很快的入门该框架,因为sails基本的语法同express相同,只不过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 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