新手从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))