新手從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(); // 無效
}
附一些便捷的方法
- 任意類型判空:obj||’’ === ‘’
- 字符拼接工具可以用string-format
- 用node-excel讀取字節數組類型的Excel文件: require("xlsx").read(new Uint8Array(data))