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))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章