深入浅出nodejs

212 阅读2分钟

基础

URL

// 1. 引入 url 模块
var url = require("url");

// 2. 引入 http 模块
var http = require("http");

// 3. 用 http 模块创建服务
/**
 * req 获取 url 信息 (request)
 * res 浏览器返回响应信息 (response)
 */
http.createServer(function (req, res) {

  // 4. 获取服务器请求
  /**
   * 访问地址是:http://localhost:3000/?userName=jsliang&userAge=23
   * 如果你执行 console.log(req.url),它将执行两次,分别返回下面的信息:
   * /  ?userName=jsliang&userAge=23
   * /  /favicon.ico
   * 这里为了防止重复执行,所以排除 req.url == /favicon.ico 的情况
   */
  if(req.url != "/favicon.ico") {
    
    // 5. 使用 url 的 parse 方法
    /**
     * parse 方法需要两个参数:
     * 第一个参数是地址
     * 第二个参数是 true 的话表示把 get 传值转换成对象
     */ 
    var result = url.parse(req.url, true);
    console.log(result);
    /**
     * Url {
     *   protocol: null,
     *   slashes: null,
     *   auth: null,
     *   host: null,
     *   port: null,
     *   hostname: null,
     *   hash: null,
     *   search: '?userName=jsliang&userAge=23',
     *   query: { userName: 'jsliang', userAge: '23' },
     *   pathname: '/',
     *   path: '/?userName=jsliang&userAge=23',
     *   href: '/?userName=jsliang&userAge=23' }
     */

    console.log(result.query.userName); // jsliang

    console.log(result.query.userAge); // 23
  }

  // 设置 HTTP 头部,状态码是 200,文件类型是 html,字符集是 utf8
  res.writeHead(200, {
    "Content-Type": "text/html;charset=UTF-8"
  });

  // 往页面打印值
  res.write('<h1 style="text-align:center">Hello NodeJS</h1>');

  // 结束响应
  res.end();

}).listen(3000);

crypto

使用crypto.createHash()的方法可以得到哈希的实例,提供的算法实现包括md5、sha1、sha256、sha512、ripemd160。在下面的例子中,hash.update()加密字符串,使用hash.digest()输出字符串。

var ctypto = require("crypto");

// 使用md5进行加密,还可以使用sha1、sha256、sha512、ripemd160方法进行加密
var hash = crypto.createHash("md5");
// 使用二进制数据流将huangdanhua字符串进行加密
// 同样也可以直接使用字符串,两者输出的结果是一样的
// 但是在不同的场景下选择合适的传递方式
hash.update(new Buffer("huandanhua", "binary"));
// 返回hash对象加密后的字符串
var encode = hash.digest("hex");

console.log(encode)

hash.digest这个函数可以传入3个类型的参数hex(十六进制)、binary(二进制)或者base64输出加密后的字符串,默认参数是binary。

官网介绍在调用digest方法后,hash对象将不能再使用,也就是会清空,

理解Buffer

Buffer的转换

Buffer的拼接

var fs = require("fs");
var iconv = require("iconv-lite")

var rs = fs.createReadStream("test.md");

var chunks = [];
var size = 0;

rs.on("data", function(chunk) {
    chunks.push(chunk);
    size += chunk.length;
})

rs.on("end", function() {
    var buf = Buffer.concat(chunks, size);
    var str = iconv.decode(buf, 'utf8');
    console.log(str)
})