day33
一、模块化
1.node模块化
let listMode = require('./modules/list') let {index, tab} = require('./modules/tab') // console.log(listMode) // console.log(tabMode) // console.log(listMode.index) // console.log(tabMode.index) // listMode.list() // console.log(index) // tab()
2.path模块
// path内置模块,专门用来处理路径 const path = require('path') // 获取路径最后一部内容,一般用它来获取文件名称 // const result = path.basename('day13/code/modules/list.js') // const result = path.basename('day13/code/pages/index.html') // console.log(result) // 给定的路径连接在一起,可以把路径片段拼成完整路径 // const result = path.join('day13', 'code', '03_path模块.js') // const result = path.join('day13', 'code', '../','03_path模块.js') // console.log(result) // 读取绝对路径,直接从根路径下读取的 // const result = path.resolve(__dirname, 'day13', 'code') // console.log(result)
3.url模块
// url内置模块,可以把url地址里面所有的东西转成对象,方便后面的使用 const url = require('url') const href = 'http://www.xxx.com:8080/pathname?id=100#bbb' // const result = url.parse(href, true) // console.log(result.query) const { query, protocol } = url.parse(href, true) console.log(query.id, protocol)
4.querystring模块
// querystring内置模块,可以把查询字符串转成对象,把对象转成查询字符串 const querystring = require('querystring') // console.log(querystring.stringify({a:1, b: 2})) // console.log(querystring.parse('a=1&b=2')) // 把对象转查询字符串 console.log(querystring.encode({a:1, b: 2})) // 把查询字符串转对象 console.log(querystring.decode('a=1&b=2'))
5.fs模块
// fs内置模块,读取和写入文件内容 const fs = require('fs') // 异步读取 // 参数1表示的是读取文件的路径 // 参数2表示的是字符串编码 // 参数3表示的一个回调函数,err表示的错误信息,res表示的是结果 // fs.readFile('./data/hello.txt', 'utf-8', (err, res)=>{ // console.log(res) // }) // const res = fs.readFileSync('./data/hello.txt', 'utf-8') // console.log(res) // 异步写入 // fs.writeFile('./data/hello.txt', '哈哈,没有代码提示真爽!', ()=>{ // console.log('写入成功') // }) // 同步写入 // fs.writeFileSync('./data/hello.txt', '嘿嘿') fs.readFile('./pages/list.html', 'utf-8', (err, res)=>{ console.log(res) })
6.hppt模块
// http模块,可以用来搭建后端的服务器,可以用来开发接口 const http = require('http') // 访问服务器地址:127.0.0.1:端口号 localhost:端口号 // 创建一个服务 const server = http.createServer((request, response)=>{ // 请求地址 // console.log(request.url) // 请求类型 // console.log(request.method) // 请求头信息 // console.log(request.headers) // 设置字符串编码 response.writeHead(200, {'Content-type':'text/html; charset=utf-8'}) // res.write() 可以给前端返回数据,可以使用多个 // response.write('hello,我是node服务器,你可以使用我了!') // response.write('嘿嘿') // 注意点:最终返回完毕后,还需要终止服务 // res.end() 其实也可以给前端返回数据,所以一般使用它比较多 // response.end() // response.end('{"name": "张涛}') // 复杂版本开发api接口,前端根据这个接口让后端返回需要的数据 switch(request.url.split('?')[0]){ case '/list': response.end('这是一个列表接口') break case '/cart': response.end('这是一个购物车接口') break case '/login': response.end('这是一个登录接口') default: response.end('not found') } }) // 监听端口号 server.listen(2402, ()=>{ console.log('您的服务器已经开启!') })
二、npm
npm包管理器 + + 常用的插件、类库、框架都进行了集中管理,不用去各个的官网挨个进行下载,直接在npm里面可以下载 + npm依赖的是node环境,没有node环境是单独使用不了包管理器 + npm管理文件是以命名行的形式进行的 + 直接可以在终端里面通过一些专门的命令来对文件的下载、删除进行操作 npm常用命令 + npm init -y => 表示项目初始化 => 当执行了这句命令后,表示你整个项目都可以npm包管理器进行管理 => 当项目初始化成功后,项目目录里面会自动生成一个package.json的配置文件,这个文件里面有你项目的基本信息,例如:项目名称、版本号、项目启动命名等等 + npm install 包@版本号 => install表示安装,可以简化成i => 包表示的就是你需要下载的文件 => @后面跟的是文件的版本号 => 如果包名后面没有跟版本后,默认下载的是最新版本的 => 使用了npm install后会默认在项目文件夹里面生成一个node_modules文件夹 => node_modules文件夹专门用来存放你下载的包 + npm uninstall 包@版本号 => uninstall表示安装,可以简化成un => 表示删除下载的包文件 + npm i || npm install => 当咱们把node_modules文件夹删除后 => 执行这个命名,可以根据package.json文件里面的记录恢复node_modules文件夹 pnpm + 在npm的基础上衍生而来的一个包管理器 + 它的速度会更快 + 项目初始化的时候还是得使用npm init -y + 下载文件的时候把之前的npm换成pnpm即可
三、RESTful
RESTful 风格是一种设计 Web API 的方式,它让 API 更加直观、易于理解和使用
获取所有文章列表 GET /articles 获取单个文章详情 GET /articles/123 表示获取ID为123的文章 注册新用户 POST /users { "username": "jane_doe", "email": "[email protected]", "password": "dw@ssw0rd" } 修改用户信息 PUT /users/jane_doe { "email": "[email protected]", "password": "newP@ssw0rd" } 删除用户账户 DELETE /users/jane_doe
RESTful 风格的例子中:
-
URL 直接表示资源(如
/articles
表示文章集合,/articles/123
表示ID为123的文章),且使用标准HTTP动词(GET、POST、PUT、DELETE)来表示对资源的操作。 -
请求参数通常包含在请求体(POST、PUT)或直接作为URL路径的一部分(GET、DELETE),而不是作为查询参数。
不遵循 RESTful 风格
获取所有文章列表 GET /getArticlesList 获取用户信息 GET /getUserInfo?username=john_doe 删除用户 POST /removeUser
非 RESTful 风格的例子中:
-
URL 表示的是操作而非资源(如
/getArticlesList
、/addArticle
),且可能使用任何HTTP动词(通常为POST)来执行各种操作。 -
请求参数往往以查询参数(如
?id=123
)或请求体中的特定字段(如newTitle
、newContent
)的形式出现,不直接反映资源本身。
总的来说,RESTful
风格通过清晰的资源模型、标准的HTTP方法和简洁的URL结构,使得API更易于理解和使用,同时也便于自动化工具、浏览器插件等对API进行处理和交互。