NodeJS的學習分享(踩坑記錄)

        新手從DEMO入手瞭解程序運行過程是一個不錯的方法,下面是網上搜的一個單請求方法,就像是很多語言初始運行的“Hello world“,請注意代碼裏的註釋:

const cheerio = require('cheerio');// cheerio實現了jquery的一個子集,調用.load()後的使用方式基本與jQuery一致,比如選擇器$(selector)與.find()函數

const http = require('http'); //接口請求包

const iconv = require('iconv-lite'); //轉碼包

const options = {

host: 'www.baidu.com',

headers: {     //注意這裏是headers,有“s“

  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.'

}

}

 http.get(options, function(res) {

  const chunks = [];

  res.on('data', function(chunk) {

    chunks.push(chunk);

  });

  res.on('end', function() {

    const html = iconv.decode(Buffer.concat(chunks), 'utf-8');

    console.log(html);    

    const result = cheerio.load(html);

    console.log(result);

  });

});

在持續開發項目的過程中,也發現了一些值得記錄的地方:

1.Mysql數據庫存儲(mysql  npm)

const mysqls = require('mysql');

let pool = mysqls.createPool({
    host: 'IP地址'
    , user: '賬號'
    , password: '密碼'
    , database: '數據庫名'
});

pool.getConnection(function (err, connection) {
    if (err) {
        return err;
    }
    let item = {
        a: 1,
        b: 2,
        c: 3
    }
    connection.query("insert into test_a(`a`,`b`,??) values(?,?,?)", ["c", 2, [3, 4]], function (error, results, fields) {
        connection.release();
        if (error) {
            return err;
        }
    })
})

①如果不小心傳入了Object類型的參數,模塊會枚舉其屬性並按UPDATE參數格式化,如傳入

val = {

        a: 1,

        b: 2,

        c: 3

    }

  轉換後爲"`a` = 1, `b` = 2, `c` = 3",這個用在修改對象數據時應該很方便,只需一個佔位符“?”。除了對象,還可以是具體值或數組;如果爲”??“,則對應的是一個或一組字段名 ,運行上方程序會有如下執行結果:

 

②返回結果集results類型是數組,即使是查詢數量的count()函數也一樣,所以需要用遍歷的方式取值

 

2.正則表達式的使用(js自帶)

    聲明方式:

                     ①函數:new RegExq("\\d","g")     用雙反斜槓轉義

                     ②單斜槓:var reg= /\d/g           用反斜槓轉義

        當用符號“g”標識全局模式時,exec()會迭代更新匹配字符的最後定位,即下一次查找會從上一次的最後定位開始查找,循環調用則能獲取到所有匹配的非null值。

 

3.同步標識async、await

       async與await是ES7繼Promise後出現的同步標識,使代碼更加簡潔且增強可讀性,十分好用。

       async表示方法可不加對象鎖執行,await是等待完成的標識,有執行完當前函數體內阻塞方法的功能,如是嵌套鏈都要有await標識,舉個例子(假定有異步方法async()):

//可行:
firstFun();
async function firstFun(){
    await secondFun();// 有效,執行完被標識函數才往下運行
    console.log("first");
}

async function secondFun(){
    await async();   // 有效
}
//不可行:
firstFun();
async function firstFun(){
     secondFun();// 無效,去掉“await”後失去同步作用,先打印“first”
     console.log("first");
}

async function secondFun(){
    await async();   // 無效
}

    

附一些便捷的方法

  1. 任意類型判空:obj||’’ === ‘’
  2. 字符拼接工具可以用string-format
  3. 用node-excel讀取字節數組類型的Excel文件: require("xlsx").read(new Uint8Array(data))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章