Node.js學習日記7

1000sprites發表於2019-08-23

1.siblings()方法
解析:siblings()方法返回被選元素的所有同級元素。同級元素是共享相同父元素的元素。查詢每個p元素的所有類名為"selected"的所有同胞元素:

$("p").siblings(".selected")

2.:checkbox選擇器
解析:選取所有帶有type="checkbox"的<input>元素:

$(":checkbox")

3.$(“input:not(:checked)”)
解析:
[1]:checked是選擇處於選中狀態的核取方塊或單選按鈕元素
[2]:not(:checked)是選擇處於非選中狀態的核取方塊或單選按鈕元素

4.$("#lastname")
解析:id="lastname"的元素。

5.prop()方法
解析:prop()方法設定或返回被選元素的屬性和值。當該方法用於返回屬性值時,則返回第一個匹配元素的值。

6.<pre>標籤
解析:pre元素可定義預格式化的文字。被包圍在pre元素中的文字通常會保留空格和換行符。而文字也會呈現為等寬字型。

7.EJS標籤含義
解析:
[1]<%:‘指令碼’標籤,用於流程控制,無輸出
[2]<%_:刪除其前面的空格符
[3]<%=:輸出資料到模板(輸出是轉義HTML標籤)
[4]<%-:輸出非轉義的資料到模板
[5]<%#:註釋標籤,不執行、不輸出內容
[6]<%%:輸出字串’<%’
[7]%>:一般結束標籤
[8]-%>:刪除緊隨其後的換行符
[9]_%>:將結束標籤後面的空格符刪除

8.利用session記錄使用者訪問網站次數
解析:

if(req.session.times){
    req.session.times++;
}else{
    req.session.times=1;
}

9.將view engine設定為ejs
解析:

app.set('views',path.join(__dirname , 'views') );
app.engine('.html', require('ejs').__express);  
app.set('view engine', 'html'); 

10.Mongoose
解析:Mongoose為模型提供了一種直接的,基於scheme結構去定義你的資料模型。它內建資料驗證,查詢構建,業務邏輯鉤子等,開箱即用。如下所示:

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
  // we're connected!
});
var kittySchema = mongoose.Schema({
  name: String
});
var Kitten = mongoose.model('Kitten', kittySchema);
var felyne = new Kitten({ name: 'Felyne' });
console.log(felyne.name);

11.exports和module.exports區別
解析:
[1]module.exports初始值為一個空物件{}
[2]exports是指向的module.exports的引用
[3]require()返回的是module.exports而不是exports

12.Proxy建構函式
解析:var proxy = new Proxy(target, handler);如下所示:
Proxy物件的所有用法,都是上面這種形式,不同的只是handler引數的寫法。其中,newProxy()表示生成一個Proxy例項,target參數列示所要攔截的目標物件,handler引數也是一個物件,用來定製攔截行為。

13.async函式
解析:
[1]在普通函式前加async操作符可以定義async函式。
[2]async函式體中的程式碼是非同步執行的,不會阻塞後面程式碼執行,但它們的寫法和同步程式碼相似。
[3]async函式會返回一個已完成的promise物件,實際在使用的時候會和await操作符配合使用。

14.express.Router
解析:在myblog目錄下建立空資料夾routes,在routes目錄下建立index.js和users.js。如下所示:
[1]index.js

const express = require('express')
const app = express()
const indexRouter = require('./routes/index')
const userRouter = require('./routes/users')

app.use('/', indexRouter)
app.use('/users', userRouter)

app.listen(3000)

[2]routes/index.js

const express = require('express')
const router = express.Router()

router.get('/', function (req, res) {
  res.send('hello, express')
})

module.exports = router

[3]routes/users.js

const express = require('express')
const router = express.Router()

router.get('/:name', function (req, res) {
  res.send('hello, ' + req.params.name)
})

module.exports = router

說明:將/和/users/:name的路由分別放到了routes/index.js和routes/users.js中,每個路由檔案通過生成一個express.Router例項router並匯出,通過app.use掛載到不同的路徑。在實際開發中推薦使用express.Router將不同的路由分離到不同的路由檔案中。

15.Node.js模組
解析:
[1]connect-mongo:將session儲存於mongodb,結合express-session使用
[2]connect-flash:頁面通知的中介軟體,基於session實現
[3]express-formidable:接收表單及檔案上傳的中介軟體
[4]config-lite:讀取配置檔案
[5]marked:markdown解析
[6]mongolass:mongodb驅動
[7]objectid-to-timestamp:根據ObjectId生成時間戳
[8]sha1:sha1加密,用於密碼加密
[9]winston:日誌
[10]express-winston:express的winston日誌中介軟體

16.ESLint
解析:ESLint是一個程式碼規範和語法錯誤檢查工具。使用ESLint可以規範程式碼書寫,可以在編寫程式碼期間就能發現一些低階錯誤。

17.EditorConfig
解析:EditorConfig是一個保持縮排風格的一致的工具,當多人共同開發一個專案的時候,往往會出現每個人用不同編輯器的情況,而且有的人用tab縮排,有的人用2個空格縮排,有的人用4個空格縮排,EditorConfig就是為了解決這個問題而誕生。.editorconfig檔案,如下所示:

# editorconfig.org
root = true

[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
tab_width = 2

[*.md]
trim_trailing_whitespace = false

[Makefile]
indent_style = tab

這裡使用2個空格縮排,tab長度也是2個空格。trim_trailing_whitespace用來刪除每一行最後多餘的空格,insert_final_newline用來在程式碼最後插入一個空的換行。

18.config-lite
解析:config-lite是一個輕量的讀取配置檔案的模組。config-lite會根據環境變數[NODE_ENV]的不同載入config目錄下不同的配置檔案。如果不設定NODE_ENV,則讀取預設的default配置檔案,如果設定了NODE_ENV,則會合並指定的配置檔案和default配置檔案作為配置,config-lite支援.js、.json、.node、.yml、.yaml字尾的檔案。config/default.js如下所示:

module.exports = {
  port: 3000,
  session: {
    secret: 'myblog',
    key: 'myblog',
    maxAge: 2592000000
  },
  mongodb: 'mongodb://localhost:27017/myblog'
}

19.connect-flash
解析:connect-flash是基於session實現的,它的原理很簡單:設定初始值req.session.flash={},通過req.flash(name,value)設定這個物件下的欄位和值,通過req.flash(name)獲取這個物件下的值,同時刪除這個欄位,實現了只顯示一次重新整理後消失的功能。

20.Express許可權控制
解析:可以把使用者狀態的檢查封裝成一箇中介軟體,在每個需要許可權控制的路由載入該中介軟體,即可實現頁面的許可權控制。

21.mocha和supertest
解析:mocha和supertest是常用的測試組合,通常用來測試restful的api介面。

22.pm2
解析:pm2是Node.js下的生產環境程式管理工具,就是我們常說的程式守護工具,可以用來在生產環境中進行自動重啟、日誌記錄、錯誤預警等等。

23.HTML5 Boilerplate
解析:HTML5 Boilerplate幫助構建快速,健壯,並且適應力強的webapp或網站。這個小小的原始碼包集合了100位開發者的經驗,可以將這些經驗運用在專案中。

24.Cordova
解析:使用HTML、CSS & JS進行移動App開發,多平臺共用一套程式碼。

25.Yeoman
解析:Yeoman是現代化前端專案的腳手架工具,用於生成包含指定框架結構的工程化目錄結構。

參考文獻:
[1]EJS[高效的JavaScript模板引擎]:https://ejs.bootcss.com/
[2]Mongoose:http://www.mongoosejs.net/
[3]ECMAScript 6入門:http://es6.ruanyifeng.com/
[4]async函式:http://es6.ruanyifeng.com/#docs/async
[5]JavaScript Promise迷你書:http://liubin.org/promises-book
[6]nswbmw/N-blog:https://github.com/nswbmw/N-blog
[7]nswbmw/N-blog:https://github.com/nswbmw/N-blog
[8]HTML5 Boilerplate:https://www.bootcss.com/p/html5boilerplate/
[9]Cordova中文網:http://cordova.axuer.com/
[10]Cordova:https://cordova.apache.org/
[11]Yeoman:https://yeoman.io/