nodejs登录模板

做这个模板希望以后能减少重复工作的时间,让工作更加高效吧
接下来要详细介绍模板制作中使用的技术和遇到的难题
在总结中提高自己的实力
我的github


采用技术

主体逻辑:express4
登录验证:passport
数据库连接和查询:kenx + bookshelf
数据库:mysql
工具:webstorm11


工具调教

这次最大的问题出在这里,工具不会用浪费了很多时间,所以把调教方法记录下来,以备后患

nodejs环境搭建

在File->Settings->Languages & Frameworks->Javascripts->Libiraries中,需要很多包
右边有一个download,可以下载需要的库,不用说,都安上

Libiraries
Download

这样子,webstorm能少报很多错

其次,快捷键ALT+ENTER能帮助解决问题,很好用

最后,有一些自己的词汇在字典中没有,webstorm有拼写检查,字典中没有的单词会在该词下打破浪线,看的让人很不爽。建议不要关掉拼写检查,右键它,有加入字典的选项,这样更方便些。


passport

passport还是给自己带来了很大的困扰的
一句话,还是理解了最好
一个不错的中文网站:passport.js学习笔记
上面讲的特别全面,足够排忧解难了


knex

knex是一个集成了Postgres, MySQL, MariaDB,SQLite3, and Oracle这些数据库连接查询的模块
非常好用
下面简单叙述一下mysql相关的使用方法

安装
npm install knex

连接数据库

var knex = require('knex')({ 
    client: 'mysql', //数据库类型
    connection: { 
        host : '127.0.0.1', 
        user : 'your_database_user', //数据库用户名
        password : 'your_database_password', //用户名对应的密码
        database : 'myapp_test' //要使用的数据库名
}});

可以加入连接池

var knex = require('knex')({ 
    client: 'mysql', //数据库类型
    connection: { 
        host : '127.0.0.1', 
        user : 'your_database_user', //数据库用户名
        password : 'your_database_password', //用户名对应的密码
        database : 'myapp_test' //要使用的数据库名
    }, 
    pool: { 
        min: 0, 
        max: 7 
}});

可以加入断线重连的时间

var knex = require('knex')({ 
    client: 'pg', 
    connection: {...}, 
    pool: {...}, 
    acquireConnectionTimeout: 10000 
});
查询

查询非常方便,不用再写sql语句了,下面来看一下吧
SELECT

knex.select('title', 'author', 'year').from('books')
//等同于
select `title`, `author`, `year` from `books`

as

knex.avg('sum_column1').from(function() { 
    this.sum('column1 as sum_column1').from('t1').groupBy('column1').as('t1')
}).as('ignored_alias')
//等同于
select avg(`sum_column1`) from (select sum(`column1`) as `sum_column1` from `t1` group by `column1`) as `t1`

column

knex.column('title', 'author', 'year').select().from('books')
//等同于
select `title`, `author`, `year` from `books`

where

knex('users').where('id', 1)
//等同于
select * from `users` where `id` = 1

knex('users').where({ 
    first_name: 'Test', 
    last_name: 'User'
}).select('id')
//等同于
select `id` from `users` where `first_name` = 'Test' and `last_name` = 'User'

knex('users').where('votes', '>', 100)
//等同于
select * from `users` where `votes` > 100

更多的语法可以去官网上查看


Bookshelf

bookshelf是在knex基础上做数据匹配的,用起来也是很方便
一般用这个来做ORM模块

安装
npm install bookshelf//必须先安装knex
数据库连接
//这里用knex连接数据库
var knex = require('knex')({
 client: 'mysql',
 connection: {
   host : '127.0.0.1',
   user : 'your_database_user',
   password : 'your_database_password',
   database : 'myapp_test',
   charset : 'utf8'
 }});

//连上knex
var bookshelf = require('bookshelf')(knex);

//选定使用的表,其中Model是bookshelf提供的一个便利的类,利用它能实现很多数据库的操作
//可以在其中添加很多属性,比如idAttribute,方便存取数据
var User = bookshelf.Model.extend({ tableName: 'users'});

//把User做成ORM模块的接口,这样就可以自由的使用Model提供的方法啦
module.exports = {
  User: User
}

bookshelf集成了很多ORM功能,虽然有些时候不尽人意,但是能做到基本满意
下面简单介绍一下常用的功能

查询

bookshelf提供了很多查询方式,功能非常强大,先说一个简单的查询

Model = require('./你的路径/model');

//这里是用一个值来查询表项,比如用fghpdf(我的用户名)通过name字段来
//查询这一条表项,fetch()会匹配到这个表项,传给model
//model提供了get()方法来获取值,栗子中就是获取id的值
new Model.User({你的字段: 字段的值}).fetch().then(function(model) {
  console.log(model.get('id'));
})

bookshelf还提供了where查询等等方式,有兴趣的可以进官网看一下

存储
Model = require('./你的路径/model');

//这里就是通过在接口传递值,用save()方法来保存在数据库中
//model可以返回错误信息
new Model.User({
  id: 值,
  name: 值,
  字段: 值
}).save().then(function(model){
  ...
})
删除

删除比较复杂,bookshelf提供了destroy的方法来删除表项,但是查找方式
跟预设的idAttribute有关,如果你在idAttribute中设置的值为id,那么你只
能通过id来删除

Model = require('./你的路径/model');

new Model.User({id: 1}).destroy().then(function(model){
  ...
})

我以后用到更多的方法,会陆续更新给大家


学习网站

提供一些不错的学习网站以供参考
从零开始nodejs系列文章
cnode论坛
基础课程
歪果仁写的教程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容