nodejs登錄模板

做這個模板希望以后能減少重復(fù)工作的時間,讓工作更加高效吧
接下來要詳細介紹模板制作中使用的技術(shù)和遇到的難題
在總結(jié)中提高自己的實力
我的github


采用技術(shù)

主體邏輯:express4
登錄驗證:passport
數(shù)據(jù)庫連接和查詢:kenx + bookshelf
數(shù)據(jù)庫:mysql
工具:webstorm11


工具調(diào)教

這次最大的問題出在這里,工具不會用浪費了很多時間,所以把調(diào)教方法記錄下來,以備后患

nodejs環(huán)境搭建

在File->Settings->Languages & Frameworks->Javascripts->Libiraries中,需要很多包
右邊有一個download,可以下載需要的庫,不用說,都安上

Libiraries
Download

這樣子,webstorm能少報很多錯

其次,快捷鍵ALT+ENTER能幫助解決問題,很好用

最后,有一些自己的詞匯在字典中沒有,webstorm有拼寫檢查,字典中沒有的單詞會在該詞下打破浪線,看的讓人很不爽。建議不要關(guān)掉拼寫檢查,右鍵它,有加入字典的選項,這樣更方便些。


passport

passport還是給自己帶來了很大的困擾的
一句話,還是理解了最好
一個不錯的中文網(wǎng)站:passport.js學(xué)習(xí)筆記
上面講的特別全面,足夠排憂解難了


knex

knex是一個集成了Postgres, MySQL, MariaDB,SQLite3, and Oracle這些數(shù)據(jù)庫連接查詢的模塊
非常好用
下面簡單敘述一下mysql相關(guān)的使用方法

安裝
npm install knex

連接數(shù)據(jù)庫

var knex = require('knex')({ 
    client: 'mysql', //數(shù)據(jù)庫類型
    connection: { 
        host : '127.0.0.1', 
        user : 'your_database_user', //數(shù)據(jù)庫用戶名
        password : 'your_database_password', //用戶名對應(yīng)的密碼
        database : 'myapp_test' //要使用的數(shù)據(jù)庫名
}});

可以加入連接池

var knex = require('knex')({ 
    client: 'mysql', //數(shù)據(jù)庫類型
    connection: { 
        host : '127.0.0.1', 
        user : 'your_database_user', //數(shù)據(jù)庫用戶名
        password : 'your_database_password', //用戶名對應(yīng)的密碼
        database : 'myapp_test' //要使用的數(shù)據(jù)庫名
    }, 
    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

更多的語法可以去官網(wǎng)上查看


Bookshelf

bookshelf是在knex基礎(chǔ)上做數(shù)據(jù)匹配的,用起來也是很方便
一般用這個來做ORM模塊

安裝
npm install bookshelf//必須先安裝knex
數(shù)據(jù)庫連接
//這里用knex連接數(shù)據(jù)庫
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提供的一個便利的類,利用它能實現(xiàn)很多數(shù)據(jù)庫的操作
//可以在其中添加很多屬性,比如idAttribute,方便存取數(shù)據(jù)
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查詢等等方式,有興趣的可以進官網(wǎng)看一下

存儲
Model = require('./你的路徑/model');

//這里就是通過在接口傳遞值,用save()方法來保存在數(shù)據(jù)庫中
//model可以返回錯誤信息
new Model.User({
  id: 值,
  name: 值,
  字段: 值
}).save().then(function(model){
  ...
})
刪除

刪除比較復(fù)雜,bookshelf提供了destroy的方法來刪除表項,但是查找方式
跟預(yù)設(shè)的idAttribute有關(guān),如果你在idAttribute中設(shè)置的值為id,那么你只
能通過id來刪除

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

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

我以后用到更多的方法,會陸續(xù)更新給大家


學(xué)習(xí)網(wǎng)站

提供一些不錯的學(xué)習(xí)網(wǎng)站以供參考
從零開始nodejs系列文章
cnode論壇
基礎(chǔ)課程
歪果仁寫的教程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容