Node中常用的内置模块(fs、path、http)

Node

介绍

1、为什么JavaScript可以在浏览器中运行

在浏览器中有js的解析器,也叫做解析引擎。不同浏览器的引擎是不同的。

IE:charka(查克拉) Safari:jscode Chrome:V8 (所有浏览器引擎中最好的一个)

2、为什么JavaScript可以操作BOM和DOM

每个浏览器都内置了DOM和BOM这样的API函数,只能在浏览器中使用。这也就是为什么各个浏览器对DOM和BOM的操作可能出现兼容问题的原因。

3、什么是nodeJS

Node.js 是一个基于 Chrome V8 Java 引擎的 JS 运行环境

nodejs可以看做是一个解析器,是一个运行时环境。可以让我们脱离浏览器来运行JavaScript代码。

浏览器中的js只能操作DOM元素。不能读写文件,不能搭建网络服务,不能操作数据库。node可以!!!。

4、JavaScript与NodeJS的区别

JavaScriptNodeJS
客户端技术,运行在浏览器服务器端技术,与Java,PHP,C++等是后端语言
有多种解析器可以使用只能运行于Chrome的V8引擎下。
因为支持多种解析器,所以存在兼容问题只有一个解析器,不存在兼容问题
ES语法,浏览器API(BOM,DOM)ES语法,node内置API(模块),第三方API(模块)
主要用于网页DOM操作,实现用户交互效果主要用于实现服务器端的运行逻辑,如访问数据库,文件读写等

文件 路径 操作

路径操作
路径操作解释
__dirname返回当前位置的父级路径
__filename返回当前文件的绝对路径
文件模块 fs

读、写、重命名、mkdir、删除

1、fs.readFile (路径、编码、回调函数)

 //读取文件的方法,第一个参数为 读取文件的路径  第二个参数为 文件的编码  第三个参数为回调函数,表示读取成功后,执行这个函数,函数有两个参数,第一个为错误信息,第二个为读取到的内容
 fs.readFile("hell.txt","utf-8",function(err,data){
     if (err) {
         //如果err有信息,则说明读取失败,将失败信息打印,并返回。 如果没有错误,err的值为null
         console.log(err);
         return;
     }
     //data就是读取到的内容
     console.log(data);
 })

2、fs.writerFile(路径、文本、回调函数)

 // 写入文件  第一个参数为路径,第二个参数为 写入的内容  第三个参数为回调函数
 fs.writeFile("hell.txt","hello,world",function(err){
     //回调函数,会在写入后执行。
     console.log(err);
 })

3、fs.unlink(文件路径、回调函数) -- 删除

 fs.unlink("hell.txt",function(err){
     if (err) {
         console.log(err);
     }
 })

4、fs.mkdir(目录、回调函数}) -- 创建文件夹

 fs.mkdir("img",function(err){
     if (err) {
         console.log(err);
     }
 });

5、fs.rename(旧名字、新名字、回调函数) -- 重命名文件

 fs.rename("hello.txt","你好.txt",function(err){
     if (err) {
         console.log(err);
     }
 })

路径模块 path

不同操作系统的路径分隔符是不同的。 window下是\ linux是/

1、path.jion( )

const {join} = require('path')
console.log(join('/user','aaa','../'))
// 输出 \user\
console.log(join('/user','aaa','../', 'bbb'))
// 输出 \user\bbb

用于连接路径。会正确使用当前系统下的分隔符

2、path.extname (path)

返回路径中的文件的后缀名

3、path.basename(path,[ext])

返回文件的文件名+后缀,如果指定了第二个参数,则表示 将该后缀删除

4、path.resolve()

将路径或路径片段的序列解析为绝对路径。

5、path.parse()

const {parse, format} = require('path')
const url = '/user/data/aaa/b.js'
const ret = parse(url)
console.log(ret)
//{ root: '/',
//  dir: '/user/data/aaa',
//  base: 'b.js',
//  ext: '.js',
//  name: 'b' }
console.log(format(ret))
// /user/data/aaa\b.js

返回一个对象,其属性表示 path 的重要元素。 尾部的目录分隔符将被忽略

path.format() 与 path.parse() 行为相反;

HTTP模块

输出:res.end() res.write() 两者的区别

 res.write() 相当于编辑状态:还未向页面输出
 res.end() 相当于确定输出响应状态
 如果只有res.write()浏览器会一直处于请求状态; res.end()后边不能再有输出,且只能输出字符串
搭建服务器
 //导入模块
 const http = require("http");
 const fs = require("fs");
 const path = require("path");
 //搭建服务器 req请求-request  res相应
 http.createServer(function(req,res){
     //req.url保存的是 网络资源路径
     if(req.url == "/"){
         //读取主页面  readFile(路径,编码方式,回调(err data)函数
         fs.readFile(path.join(__dirname,"index.html"),"utf-8",(err,data)=>{
             if(err){
                 console.log("服务器出错");
                 //响应错误
                 res.setHeader("Content-Type","text/html,charset=utf-8")//设置字符集
                 res.end(JSON.stringify(err));
                 return;
             }
             //响应页面
             res.end(data);
         })
     } else if (req.url == '/favicon.ico') {
         //获取图标
         fs.readFile(path.join(__dirname,"favicon.ico"), function(err, data) {
             if (err) {
                 res.end(JSON.stringify(err));
                 return;
             }
             res.end(data);
         })
     }else{
         //获取其他页面
         fs.readFile(path.join(__dirname,req.url), function(err, data) {
             if (err) {
                 res.end(JSON.stringify(err));
                 return;
             }
             res.end(data);
         })
     }
 }).listen(3000) //监听端口
 //开启服务器的提示
 console.log("服务器开启成功");
获取请求的参数

1、请求方式

常见的请求方式有两种:post get

post和get的区别:

post:

1、post的语义是 推送,邮寄, 使用场景为 向服务器推送用户信息。比如,注册,登录。 2、安全的,参数不会出现在地址栏 3、传输的大小不会被浏览器限制,理论上可以相传多大的文件就传多大的文件。但是一般服务器会显示你们的上传大小。

get:

1、get的语义是 获取, 使用场景为 获取服务器上的数据。比如,访问某一个页面,获取列表信息等。 2、不安全。 3、上传大小最多只有4KB。

 表单提交:
 <form action="提交的地址" method="post/get……">
     <!-- input的name属性必须定义,只有有name属性的input,它的值才会被form提交到服务器 -->
     用户名:<input type="text" name="username"><br>
     密  码:<input type="password" name="pwd"><br>
     <input type="submit" value="登录">
 </form>

http请求的八种方式:

 一、GET方法:最常用的方法,它是发送一个请求来获取服务器上的资源,资源通过HTTP响应头和数据(如html文档,图片,样式,视频等)返回给客户端(如浏览器)。
 ​
 二、POST方法:常用方法,用于向服务器提交数据,请求的参数要在请求体(body)中发送,可用于表单的提交和异步提交(如ajax),理论上,POST传递的数据量没有限制。
 ​
 三、PUT方法:与POST方法类似,在RESTful设计规范中,一般POST方法代表新增,PUT方法代表整体更新,选择什么方法主要看接口的要求,PUT请求的参数一样要在HTTP请求的消息主体中发送,默认情况下put请求是无法提交表单数据的。
 ​
 四、PATCH方法:与PUT方法类似,但PATCH方法通常应用于局部更新。
 ​
 五、DELETE方法:删除某一个资源,默认情况下DELETE方法在 URL 中附带查询参数,也无法提交表单数据的。
 ​
 六、OPTIONS方法:获取服务器支持的HTTP请求方法,服务器性能、跨域检查等。
 ​
 七、CONNECT方法:方法的作用是把服务器作为跳板,让服务器代替用户去访问其他网页,只有把数据原原本本返回给用户,网页开发基本不用这个方法。如果是http代理就会使用这个,让服务器代理用户访问其他网页,类似于中介。
 ​
 八、TRACE方法:回服务器收到的请求,主要用于测试或诊断。

2、常见状态码

200:成功 2开头的都表示成功

404:请求的资源不存在。 4开头的都表示客户端错误。

302:重定向。 类似于生活的呼叫转移。

304:缓存

500:服务器端错误。

3、获取参数

引入 const { URLSearchParams } = require("url")

URLSearchParams 可以对 get请求过来的参数进行解析,将查询字符串转为一个对象。通过该集合的get方法来获取相应的值。

 //将查询字符串解析为对象,方便获取其中的数据
 let params = new URLSearchParams(req.url.substring(2));
 //获取输入的用户名
 let username = params.get("username")
 //获取输入的密码
 let pwd = params.get("pwd");
 ……

get参数:是以数据流的形式不断地传输 因此需要:一个变量用来接收数据、两个事件用来监听

 //当有数据传输过来时,会自动触发。
 req.on("data",trunk=>{
 body += chunk;  //trunk 每次传输的数据 body 数据字符串
 })
 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 //当所有的数据都传输完了时,会自动触发。
 req.on("end",()=>{
 这是body保存的是所有传入数据……
 })
 //定义一个变量 body,用来处理存储用户传输的数据。
 let body = "";
 //监听 data事件,当有数据传输过来时,会自动触发。
 req.on("data", chunk => {
     body += chunk;
 })
 //监听 end 事件,当所有的数据都传输完了时,会自动触发。
 req.on("end", () => {
     // 将查询字符串解析为对象,方便获取其中的数据
     let params = new URLSearchParams(body);
     //获取输入的用户名
     let username = params.get("username")
     //获取输入的密码
     let pwd = params.get("pwd");
     ……
 })

MIME类型
 1)文本类型
 text/plain
 text/html
 text/css
 text/javascript
 text/json
 ...
 ​
 2)图片类型
 image/gif, image/png, image/jpeg, image/bmp, image/webp
 ​
 3)音频类型
 audio/midi, audio/mpeg, audio/webm, audio/ogg, audio/wav
 ​
 4)视频类型
 video/webm, video/ogg
 ​
 5)二进制数据
 application/octet-stream, application/pkcs12, application/vnd.mspowerpoint, application/xhtml+xml, application/xml,  application/pdf
 ​
 6)细分领域的文件类型(常用)
 multipart/form-data
 multipart/byteranges    

特别注意:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值