Node.js基础常用知识点全总结(三)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: Node.js基础常用知识点全总结

3. url模块


我们发现请求的url带有 ?等传参的时候,我们要学习的是对这个传来的参数的处理,这就要用到本小节的url模块了。


parse( ) 方法

url模块的parse()方法会对请求的url进行解析,解析成一个Url对象


const url = require('url')
const urlString = 'https://www.baidu.com:443/ad/index.html?id=8&name=mouse#tag=110'
//parse()方法会对请求的url进行解析,解析成一个Url对象
const parsedStr = url.parse(urlString)
console.log(parsedStr)

fac1d577c9ee4f58a46e81f68d434210.png


我们看到Url对象里的属性有非常多,我们通过这些属性就可以对路径和参数进行操作。

format( ) 方法

如果你有一个Url对象的话,url的format( ) 方法就可以把这个对象格式化成url地址。


const url = require('url')
const urlObject = {
    protocol: 'https:',
    slashes: true,
    auth: null,
    host: 'www.baidu.com:443',
    port: '443',
    hostname: 'www.baidu.com',
    hash: '#tag=110',
    search: '?id=8&name=mouse',
    query: { id: '8', name: 'mouse' },
    pathname: '/ad/index.html',
    path: '/ad/index.html?id=8&name=mouse'
}
const parsedObj = url.format(urlObject)
console.log(parsedObj)

6bc193a738ea419e91f534c52546f79e.png


resolve( ) 方法


resolve( ) 方法的作用是可以进行url的拼接。


const url = require('url')
// 注意结尾加 / 和不加 / 的区别
let a = url.resolve('/one/two/three', 'four')
let b = url.resolve('/one/two/three/', 'four')
let c = url.resolve('http://example.com/', '/one')
let d = url.resolve('http://example.com/one', '/two')
console.log(a + "," + b + "," + c)


e35ab2f1c778465a9a8e175dfc71c6c8.png


上面这些是Node.js旧版url模块的API,很多方法都被遗弃了,我们下面学习一下新版API的用法。


new URL( )


传入两个参数,第一个参数是要解析的绝对或相对的输入网址。如果第一个路径是相对的,则需要 第二个参数。第二个阐述为基本的url地址。


const myURL = new URL('/foo?a=1&b=2', 'https://example.org/');
console.log(myURL)

5c139c8a06d94630930b37a4b2b216f3.png


4. querystring模块


querystring 模块提供了用于解析和格式化网址查询字符串的实用工具。 querystring API 被视为旧版的,官方还在维护。它既然存在过,我们也有必要来学习一下这个模块。


parse( ) 方法

这个方法可以把查询字符串,转化为一个对象


const querystring = require('querystring')
let qs = 'x=3&y=4'
let parsed = querystring.parse(qs)
console.log(parsed)

3855646fc06f494d8d6d31a613192beb.png


stringify( ) 方法

这个方法和上面的parse()方法的用法相反

const querystring = require('querystring')
let qo = {
    x: 3,
    y: 4
}
let parsed = querystring.stringify(qo)
console.log(parsed)


5. http模块补充知识点

json形式的接口

我们上面案例里面用res.write() 向浏览器返回html标签数据,其实我们还可以向浏览器返回json数据的。


const http = require('http')
const url = require('url')
const app = http.createServer((req, res) => {
    let urlObj = url.parse(req.url, true)
    switch (urlObj.pathname) {
        case '/api/user':
            res.end(`{"name": "haiexijun","age":"20"}`)
            break
        default:
            res.end('404 not found')
            break
    }
})
app.listen(8080, () => {
    console.log('start server')
})


b37550e2f64e4d06834e6de235d7167c.png

跨域:CORS


    res.writeHead(200, {
        'content-type': 'application/json;charset=utf-8',
        'Access-Control-Allow-Origin': '*'
    })


执行 GET 请求

有些时候,前端无法跨域去请求数据。而Node.js却可以实现跨域请求数据。所以Node.js常常位于前端和后端中间,帮前端请求后端数据。所以node.js往往用于做中间层。这样就跨域去请求别人网站上的数据,然后为自己所用,比如爬虫等。

image.png

下面我们来用Node.js来get请求获取数据:

const https = require('https')
let datas = ''
//因为要请求的数据时https的,所以也要用https模块请求
https.get("https://img-home.csdnimg.cn/data_json/toolbar/toolbar1105.json",response => {
    //node.js是对数据一部分一部分获取的
    //请求数据,触发node.js的data事件时,会调用后面定义的回调函数对数据进行拼接
    response.on('data',(chunk)=>{
        datas += chunk
    })
    //当Node.js请求完数据时,会触发end事件,调用后面定义的的回调函数。
    response.on('end',()=>{
        console.log(datas)
    })
})


我们启动服务后看到控制台输出了请求过来的数据:


845822af66284cf99e682f069cd8cbb4.png


POST请求其实大同小异,只是用的方法不一样而已,POST请求用https.request方法进行请求。


const https = require('https')
//请求的数据要转成json格式
const datas = JSON.stringify({
  todo: '做点事情'
})
const options = {
  hostname: 'nodejs.cn',
  port: 443,
  path: '/todos',
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Content-Length': data.length
  }
}
const req = https.request(options, res => {
 res.on('data', (chunk) => {
    dada+=chunk
  })
})
req.on('end', () => {
  console.error(error)
})
//请求的数据datas要writey发出去哦!!
req.write(data)
req.end()


其实除了用Node.js的内部模块发http请求意外,还可以用第三方模块来发送请求,比如我们常用的axios。


6. event事件模块


events 模块为提供了 EventEmitter 类,这是在 Node.js 中处理事件的关键。


const EventEmitter = require('events')
//new EventEmitter()构造函数来创建event对象
const event = new EventEmitter();
//on()添加当事件被触发时调用的回调函数。
event.on('play',()=>{
    console.log("play事件触发了")
})
// emit()触发事件, 按照事件被注册的顺序同步地调用每个事件监听器。
event.emit("play")


EventEmitter 对象还有很多方法,这里就不多解释了。你只要知道event模块能干什么就好,用到的时候再去查吧。


7. fs文件操作模块


要对文件进行操作,先要引入fs模块。


const fs = require('fs')


文件夹的操作

(1) 创建新的文件夹 :使用 fs.mkdir()fs.mkdirSync() 可以创建新的文件夹。


const fs = require('fs')
//方法传入两个参数,第一个参数是路径,可以是绝对路径,也可以是相对路径
//第二个参数是错误时的回调
fs.mkdir("./test",(err)=>{
    console.log(err)
})


fs.mkdirSync() 是同步的版本,要用try catch捕获异常,而不是回调:


const fs = require('fs')
const folderName = './test'
try {
  if (!fs.existsSync(folderName)) {
    fs.mkdirSync(folderName)
  }
} catch (err) {
  console.error(err)
}


(2) 查看文件夹或文件是否存在:使用fs.existsSync( )传入文件或文件夹的名称就好了。会返回一个布尔值。


const fs = require('fs')
isExist=fs.existsSync("./test")
console.log(isExist)


(3) 读取目录的内容 :使用 fs.readdir() 或 fs.readdirSync() 可以读取目录的内容。

下面这段代码会读取文件夹的内容(全部的文件和子文件夹),并返回它们的相对路径:


const fs = require('fs')
const path = require('path')
const folderPath = './test'
console.log(fs.readdirSync(folderPath))


(4) 重命名文件夹 :使用 fs.rename()fs.renameSync() 可以重命名文件夹。 第一个参数是当前的路径,第二个参数是新的路径。


const fs = require('fs')
fs.rename('./test', './haiexijun', err => {
    if (err) {
        console.error(err)
        return
    }
})


fs.renameSync() 是同步的版本,要用try catch捕获异常,而不是回调:


const fs = require('fs')
try {
  fs.renameSync('./test', './haiexijun')
} catch (err) {
  console.error(err)
}
相关文章
|
5月前
|
JavaScript 前端开发 CDN
总结 vue3 的一些知识点:Vue.js 安装
总结 vue3 的一些知识点:Vue.js 安装
|
5月前
|
XML JSON 前端开发
|
5月前
|
JavaScript
总结 vue3 的一些知识点:​Vue.js 条件语句​
总结 vue3 的一些知识点:​Vue.js 条件语句​
|
8天前
|
JavaScript 前端开发 Java
JavaScript 类知识点概览
概览JavaScript中类的知识点,包括类的定义和实现、添加方法和get/set方法、类的继承和静态方法的使用。通过学生类和人员类的例子,演示了类的构造器、方法定义、继承关系和静态方法的调用。
JavaScript 类知识点概览
|
2月前
|
JavaScript 前端开发
JavaScript 知识点总结
JavaScript 知识点总结JavaScript 是一种广泛应用于前端开发的编程语言。本文将总结一些常见的 JavaScript 知识点,帮助你更好地理解和应用这门语言。 一、基本语法和数据类型 变量声明:使用 var、let 或 const 声明变量。var 声明的变量具有函数作用域,而 let 和 const 声明的变量具有块级作用域。 var x = 10; let y = 20; const z = 30; 数据类型:JavaScript 中有以下几种基本数据类型:String(字符串)、Number(数字)、Boolean(布尔值)、Undefined(未定义)、Null(空值
35 3
|
5月前
|
JavaScript 前端开发 Java
前端知识点03(JS)
前端知识点概览:了解JS中的this指向,包括全局、函数、new、apply/call/bind及箭头函数的规则。理解script的async和defer属性对脚本加载和执行的影响。探讨setTimeout和setInterval的用法及其在性能上的考量。ES6与ES5的区别在于新语法特性,如let/const、箭头函数、模板字符串、模块化、类和继承等。此外,ES6还引入了Symbol、解构赋值、默认参数、Map/Set和Generator等功能。别忘了点赞和支持作者哦!
44 1
|
5月前
|
存储 缓存 前端开发
< 今日份知识点:Javascript本地存储的方式有哪些?区别及应用场景? >
在前端开发中,偶尔需要存储一些如: 用户信息、登录状态、历史记录等常量数据。用于后续二次调用,并且避免刷新后丢失。这时,就需要用到本地存储了。 在`JavaScript` 中,提供了四种可用的本地存储方式: **`cookie`** ,**`sessionStorage`**, **`localStorage`**, **`indexedDB`** ( 已废除的 `WebSQL` )。四种方式各有千秋,接下来,就由小温带各位卷王了解一下,`Javascript` 中的本地存储吧
< 今日份知识点:Javascript本地存储的方式有哪些?区别及应用场景? >
|
11月前
|
JavaScript 前端开发 数据库
前端常见知识点汇总(ES6,Vue,axios,Node.js,npm,webpack)-3
前端常见知识点汇总(ES6,Vue,axios,Node.js,npm,webpack)
93 0
|
5月前
|
JavaScript 前端开发 Java
[javascript]知识点
如果文中阐述不全或不对的,多多交流。
165 0
[javascript]知识点
|
5月前
|
JavaScript 前端开发
javascript知识点
javascript知识点
下一篇
无影云桌面