做這個模板希望以后能減少重復(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,可以下載需要的庫,不用說,都安上


這樣子,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ǔ)課程
歪果仁寫的教程