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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 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)
}
相关文章
|
6月前
|
JavaScript 前端开发 API
|
11天前
|
自然语言处理 JavaScript 前端开发
[JS]知识点
本文介绍了JavaScript中的多个重要知识点,包括ES6、严格模式、类与对象、解构、跨域问题及入口函数等。文章通过详细示例和推荐的外部资源,帮助读者更好地理解和应用这些概念。内容持续更新中,适合初学者和进阶开发者参考。
10 2
[JS]知识点
|
6月前
|
JavaScript 前端开发 CDN
总结 vue3 的一些知识点:Vue.js 安装
总结 vue3 的一些知识点:Vue.js 安装
|
6月前
|
JavaScript
总结 vue3 的一些知识点:​Vue.js 条件语句​
总结 vue3 的一些知识点:​Vue.js 条件语句​
|
11天前
|
JavaScript 前端开发 中间件
JS服务端技术—Node.js知识点
本文介绍了Node.js中的几个重要模块,包括NPM、Buffer、fs模块、path模块、express模块、http模块以及mysql模块。每部分不仅提供了基础概念,还推荐了相关博文供深入学习。特别强调了express模块的使用,包括响应相关函数、中间件、Router和请求体数据解析等内容。文章还讨论了静态资源无法访问的问题及其解决方案,并总结了一些通用设置。适合Node.js初学者参考学习。
27 1
|
19天前
|
存储 JavaScript 前端开发
JS的ES6知识点
【10月更文挑战第19天】这只是 ES6 的一些主要知识点,ES6 还带来了许多其他的特性和改进,这些特性使得 JavaScript 更加现代化和强大,为开发者提供了更多的便利和灵活性。
15 3
|
1月前
|
存储 JSON JavaScript
JS知识点
JS知识点
20 3
|
1月前
|
JavaScript 前端开发 Java
【javaScript数组,函数】的基础知识点
【javaScript数组,函数】的基础知识点
23 5
|
2月前
|
JavaScript 前端开发 Java
JavaScript 类知识点概览
概览JavaScript中类的知识点,包括类的定义和实现、添加方法和get/set方法、类的继承和静态方法的使用。通过学生类和人员类的例子,演示了类的构造器、方法定义、继承关系和静态方法的调用。
JavaScript 类知识点概览
|
1月前
|
前端开发 JavaScript
JavaScript 知识点总结
JavaScript 知识点总结
27 0