• nodejs API


    1、url网址解析
    url.parse(urlString[, parseQueryString[, slashesDenoteHost]])
    url.format(urlObject)
    url.resolve(from, to)
    ┌─────────────────────────────────────────────────────────────────────────────┐
    │ href │
    ├──────────┬┬───────────┬─────────────────┬───────────────────────────┬───────┤
    │ protocol ││ auth │ host │ path │ hash │
    │ ││ ├──────────┬──────┼──────────┬────────────────┤ │
    │ ││ │ hostname │ port │ pathname │ search │ │
    │ ││ │ │ │ ├─┬──────────────┤ │
    │ ││ │ │ │ │ │ query │ │
    " http: // user:pass @ host.com : 8080 /p/a/t/h ? query=string #hash "
    │ ││ │ │ │ │ │ │ │
    └──────────┴┴────���──────┴──────────┴──────┴──────────┴─┴──────────────┴───────┘
    (all spaces in the "" line should be ignored -- they are purely for formatting)

    https://www.baidu.com:8080/api.php?from=1000phone&course=nodejs#test

     1 {
     2 protocol: 'https:',
     3 slashes: true,
     4 auth: null,
     5 host: 'www.baidu.com:8080',
     6 port: '8080',
     7 hostname: 'www.baidu.com',
     8 hash: '#test',
     9 search: '?from=1000phone&course=nodejs',
    10 query: { from: '1000phone', course: 'nodejs' },
    11 pathname: '/api.php',
    12 path: '/api.php?from=1000phone&course=nodejs',
    13 href: 'https://www.baidu.com:8080/api.php?from=1000phone&course=nodejs#test' }

    执行命令
    node
    url
    url.parse("https://www.baidu.com")
    url.parse("https://www.baidu.com:8080/api.php?from=qianfeng&course=node#level")-----query为字符串
    url.parse("https://www.baidu.com:8080/api.php?from=qianfeng&course=node#level",true)-----query为对象
    url.parse("https://www.baidu.com",true)
    url.parse("//www.baidu.com:8080/api.php?from=qianfeng&course=node#level",true)--没有解析到协议和端口号
    url.parse("//www.baidu.com:8080/api.php?from=qianfeng&course=node#level",true)--解析到host和port
    将之前的解析出来的使用url.format()执行,可以解析出一个url地址
    两段url解析成一个url.resolve("http://www.baidu.com","/api/list.php");
    2、querystring网址:http://nodejs.cn/api/

     1 querystring.escape(str)
     2 querystring.parse(str[, sep[, eq[, options]]])
     3 querystring.stringify(obj[, sep[, eq[, options]]])
     4 querystring.unescape(str)
     5 
     6 node
     7 querystring
     8 querystring.stringify({name:"qianfeng",course:["nodejs","vue.js"],from:""})
     9 querystring.stringify({name:"qianfeng",course:["nodejs","vue.js"],from:""},",")----设置分隔符
    10 querystring.stringify({name:"qianfeng",course:["nodejs","vue.js"],from:""},",",":")
    11 querystring.parse(默认的字符串)
    12 
    13 querystring.escape({"from":"beijing"}});
    14 querystring.escape("北京")


    3、http模块

    4、http小爬虫
    创建一个文件spider.js
    网址:https://www.lagou.com

     1 var http = require("http");
     2 var https = require("https");
     3 var url = "https://www.lagou.com";
     4 https.get(url,function(res){
     5  var html="";
     6  res.on("data",function(data){
     7 html+=data;
     8 )
     9 res.on("end",function(){
    10 console.log(html);
    11 })
    12 res.on("error",function(err){
    13 console.log(err);
    14 })
    15 })



    引入一个第三方工具
    cnpm install cheerio --save-dev
    注意:
    --save表示安装到本地---项目依赖--dependencies
    -dev表示安装到开发依赖----devDependencies---项目上线时不需要开发依赖

     1 var http = require("http");
     2 var https = require("https");
     3 var cheerio = require("cheerio");
     4 var url = "https://www.lagou.com";
     5 function filter(html){
     6 var $ = cheerio.load(html);
     7 var menu = $(".menu_main");
     8 var menuData = [];
     9 menu.each(function(index,value){
    10 var menuTitle = $(value).find("h2").text();
    11 var menuLists = $(value).find("a");
    12 var menulist = [];
    13 menuLists.each(function(index,value){
    14 menulist.push($(value).text())
    15 })
    16 menuData.push({menuTitle:menuTitle,menulist:menulist})
    17 })
    18 return menuData
    19 
    20 
    21 }
    22 
    23 https.get(url,function(res){
    24 var html="";
    25 res.on("data",function(data){
    26 html+=data;
    27 )
    28 res.on("end",function(){
    29 console.log(html);
    30 var result = filter(html);
    31 printMenu(result);
    32 })
    33 res.on("error",function(err){
    34 console.log(err);
    35 })
    36 })
    37 
    38 function printMenu(menu){
    39 menu.forEach(function(value){
    40 console.log(value.menuTitle+"
    ");
    41 value.menuList.forEach(function(value){
    42 console.log(value);
    43 }
    44 )
    45 })
    46 }

    5、request方法
    新建文件requestGet.js https://developers.douban.com/wiki/?title=movie_v2#top250
    请求的数据http://api.douban.com/v2/movie/top250
    http://json.cn/

     1 const https = require('https')
     2 var options = {
     3 hostname: 'api.douban.com',
     4 port: 443,
     5 method: 'GET',
     6 path: '/v2/movie/top250'
     7 }
     8 var responseData = ''
     9 var request = https.request(options, (response) => {
    10 // console.log(response)
    11 // console.log(response.statusCode)
    12 // console.log(response.headers)
    13 response.setEncoding('utf8')
    14 response.on('data', (chunk) => {
    15 responseData += chunk
    16 })
    17 response.on('end', () => {
    18 JSON.parse(responseData).subjects.map((item) => {
    19 console.log(item.title)
    20 })
    21 })
    22 })
    23 
    24 request.on('error', (error) => {
    25 console.log(error)
    26 })
    27 
    28 request.end()


    新建文件requestPost.js

     1 const http = require('http')
     2 const querystring = require('querystring')
     3 
     4 var postData = querystring.stringify({
     5 'question[title]':'这个视频不错2',
     6 'question[content]':'<p>赞一个</p>',
     7 'question[courseId]':'227',
     8 'question[lessonId]':'1753',
     9 '_csrf_token':'32b0e1e07c657000e1f7250cdeac0377e6af688f'
    10 })
    11 
    12 var options = {
    13 hostname: 'www.codingke.com',
    14 port: 80,
    15 method: 'POST',
    16 path: '/ajax/create/course/question',
    17 headers: {
    18 'Accept':'*/*',
    19 'Accept-Encoding':'gzip, deflate',
    20 'Accept-Language':'zh-CN,zh;q=0.8,en;q=0.6',
    21 'Connection':'keep-alive',
    22 'Content-Length': postData.length,
    23 'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
    24 'Cookie':'PHPSESSID=qsqkoo0bq1grc6a5jo7kgk5tn7; CNZZDATA1256018185=1839628736-1476447839-null%7C1485424829; Hm_lvt_9f92046de4640f3c08cf26535ffdd93c=1485410187,1485420976; Hm_lpvt_9f92046de4640f3c08cf26535ffdd93c=1485426828',
    25 'Host':'www.codingke.com',
    26 'Origin':'http://www.codingke.com',
    27 'Referer':'http://www.codingke.com/v/398-chapter-227-course',
    28 'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36',
    29 'X-CSRF-Token':'32b0e1e07c657000e1f7250cdeac0377e6af688f',
    30 'X-Requested-With':'XMLHttpRequest'
    31 }
    32 }
    33 
    34 var request = http.request(options, (res) => {
    35 console.log('Status:' + res.statusCode)
    36 console.log('headers:' + JSON.stringify(res.headers))
    37 res.setEncoding('utf8')
    38 res.on('data', (chunk) => {
    39 console.log(chunk)
    40 })
    41 res.on('end', () => {
    42 console.log('技术问答提交完毕!')
    43 })
    44 })
    45 
    46 request.on('error', (error) => {
    47 console.log(error)
    48 })
    49 
    50 request.write(postData)
    51 
    52 request.end()

    7、event事件
    events
    使用事件:EventEmitter
    事件的参数
    只执行一个的事件监听器

    创建一个文件event_emitter.js

    1 const EventEmitter = require('events')
    2 class Player extends EventEmitter {}
    3 var player = new Player()
    4 player.once('play', (track) => {
    5 console.log(`正在播放:《${track}》`)
    6 })
    7 player.emit('play', '精绝古城')
    8 player.emit('play', '黄皮子坟')

    8、File System
    得到文件与目录的信息:stat
    创建一个目录:mkdir
    创建文件并写入内容:writeFile,appendFile
    读取文件的内容:readFile
    列出目录的东西:readdir
    重命名目录或文件:rename
    删除目录与文件:rmdir,unlink

    创建fs_1.js---查看状态

    const fs = require('fs')
    
    fs.stat('hello.js', (error, stats) =>{
    if(error){
    console.log(error)
    } else {
    console.log(stats)
    console.log(`文件:${stats.isFile()}`)
    console.log(`目录:${stats.isDirectory()}`)
    }
    })


    创建fs_2.js---创建目录

    const fs = require('fs')
    fs.mkdir('logs', (error) => {
    if(error){
    console.log(error)
    } else {
    console.log('成功创建目录:logs')
    }
    })



    创建fs_3.js---写入文件

     1 const fs = require('fs')
     2 fs.writeFile('logs/hello.log', '您好 ~ 
    ', (error) => {
     3 if(error) {
     4 console.log(error)
     5 } else {
     6 console.log('成功写入文件')
     7 }
     8 })
     9 
    10 fs.appendFile('logs/hello.log', 'hello ~ 
    ', (error) => {
    11 if(error) {
    12 console.log(error)
    13 } else {
    14 console.log('成功写入文件')
    15 }
    16 })

    创建fs_4.js---读取文件

    1 const fs = require('fs')
    2 fs.readFile('logs/hello.log', 'utf8', (error, data) =>{
    3 if (error) {
    4 console.log(error)
    5 } else {
    6 console.log(data)
    7 }
    8 })


    创建fs_5.js---读取文件夹

    1 const fs = require('fs')
    2 fs.readdir('logs', (error, files) => {
    3 if (error) {
    4 console.log(error)
    5 } else {
    6 console.log(files)
    7 }
    8 })


    创建fs_6.js--文件重命名

    1 const fs = require('fs')
    2 fs.rename('logs/hello.log', 'logs/greeting.log', (error) =>{
    3 if (error) {
    4 console.log(error)
    5 } else {
    6 console.log('重命名成功')
    7 }
    8 })

    创建fs_7.js--删除目录

     1 const fs = require('fs')
     2 fs.readdirSync('logs').map((file) => {
     3 fs.unlink(`logs/${file}`, (error) => {
     4 if (error) {
     5 console.log(error)
     6 } else {
     7 console.log(`成功的删除了文件: ${file}`)
     8 }
     9 })
    10 })
    11 
    12 fs.rmdir('logs', (error) =>{
    13 if (error) {
    14 console.log(error)
    15 } else {
    16 console.log('成功的删除了目录:logs')
    17 }
    18 })


    9、Stream
    读取文件流
    可读流的事件
    可写的文件流
    pipe
    链式使用 pipe

    创建文件stream.js

     1 const fs = require('fs')
     2 var fileReadStream = fs.createReadStream('data.json')
     3 var fileWriteStream = fs.createWriteStream('data-1.json')
     4 var count = 0
     5 fileReadStream.once('data', (chunk) => {
     6 console.log(chunk.toString())
     7 fileWriteStream.write(chunk)
     8 })
     9 fileReadStream.on('data', (chunk) => {
    10 console.log(`${ ++count } 接收到:${chunk.length}`)
    11 fileWriteStream.write(chunk)
    12 })
    13 fileReadStream.on('end', () => {
    14 console.log('--- 结束 ---')
    15 })
    16 fileReadStream.on('error', (error) => {
    17 console.log(error)
    18 })


    流的操作

    1 const fs = require('fs')
    2 var fileReadStream = fs.createReadStream('data.json')
    3 var fileWriteStream = fs.createWriteStream('data-1.json')
    4 fileReadStream
    5 .pipe(fileWriteStream)


    进一步处理---写入之前进行压缩

     1 const fs = require('fs')
     2 const zlib = require('zlib')
     3 
     4 var fileReadStream = fs.createReadStream('data.json')
     5 var fileWriteStream = fs.createWriteStream('data.json.gz')
     6 
     7 fileWriteStream.on('pipe', (source) => {
     8 console.log(source)
     9 })
    10 
    11 fileReadStream
    12 .pipe(zlib.createGzip())
    13 .pipe(fileWriteStream)
  • 相关阅读:
    Android 面试题及答案(2)
    Android 框架学习之 第一天 okhttp & Retrofit
    Gui系统之View体系(2)---View的setContent
    Android 高级面试题及答案
    Android 热修复技术(1)---原理
    android 事件分发机制
    android Gui系统之WMS(2)----窗口的添加
    在腾讯实习的那段日子:不要在难受的时候选择逃避离开
    全国女人都当妓女的古代神秘国(转载)
    MongoDB(索引及C#如何操作MongoDB)(转载)
  • 原文地址:https://www.cnblogs.com/shenjp/p/6407235.html
Copyright © 2020-2023  润新知