node.js入门 fs模块 path模块 http模块

1.1下载node.js

  • 1.Node.js官网地址:Node.js

  • 中文:API 文档 | Node.js 中文网

  • 2.如何确认当前电脑是否已经安装了Node环境

  • 打开终端,输入 node -v,如果能看到版本号则说明当前电脑已经安装Node环境,如果提示Node不是内部或外部命令,则表示未安装

    • 一旦安装了node,则会自动一并安装npm

    • 3.nodemon

      • node开发之友,当你的js文件发生变化的时候,nodemon会自动帮你启动node程序

    • 安装: npm install -g nodemon

      • 使用:nodemon [js文件名]

1.2 node.js运行环境执行js的三种方法

1.原理 打开安装的node.js运行环境执行js

直接输入代码

2.打开电脑终端cmd,执行命令:node[js文件名]

3.vscode:点击右键选择中断打开 输入node 文件名

要在js文件的位置打开集成终端

node 01 tab

1. 

1.3-服务端(后端)js与客户端(前端)js区别

  • 1.客户端JS由三部分组成

    • ECMAScript:确定js的语法规范

    • DOM:js操作网页内容

    • BOM:js操作浏览器窗口

  • 2.服务端JS只有ECMAScript

    • 因为服务端是没有界面的

      • ==在nodejs中使用dom与bom的api程序会报错==

2 -fs模块

2.1 -fs模块读取文件readFile.js

// (1)导入模板
const fs=require('fs')

// 使用方法
// 同步 :在方法后面加上Sync(node.js中很少使用)
// 第一个参数 文件路径 第二个参数:文件编码 默认二进制 中文utf8
// let data=fs.readFileSync('./data/aaa.txt','utf8')
// console.log(data);


// node.js中所有的方法默认都是异步的
fs.readFile
/**
* @description:读取文件
* @param {string}  path文件路径
* @param {string}  encoding文件编码
* @param {function} 异步回调 callback(err,data)
* @return: 

*/
fs.readFile('./data/aaa.txt','utf8',(err,data)=>{
  if(err){
    throw err
  }else{
    console.log('读取成功');
    console.log(data)
  }
})

2.2写入文件fs.write

// 1.导入模块
const fs =require('fs')

// 2.使用模块
/**
* @description:读取文件
* @param {string}  path文件路径
* @param {data}  要写入的数据
* @param {option}:文件编码,一般不写,node.js会根据data自动识别
* @param {function} err=>{}
* @return: 
*/
fs.writeFile('./data/bbb.txt','黑马程序员',err=>{
  if(err){
    throw err
  }else{
    console.log('写入成功');
  }
})

2.3 同步与异步   

fs.readFile(),异步无序  不立即执行

fs.readFileSync() 同步有序 从上往下执行  同步代码会立即执行

1.js编译器解析流程

   1.编译器从上往下依次'解析'代码

   2.判断代码是同步还是异步

     2.1同步代码:立即执行

     2.2异步代码:不立即'执行',而是放入事件队列中

   3.所有的代码指向完毕后,才会执行异步代码  

 2.同步与异步区别

     (1) 顺序不同 ,异步无序,同步有序且优先执行

     (2)效率不同异步不会阻塞线程(效率高),同步会阻塞线程(效率低)

     (3)代码不同 :一步一般有回调,同步一般没有回调

// 导入模块
const fs=require('fs')
fs.readFile('./data/aaa.txt','utf-8',(err,data)=>{
  if(err){
    throw err
  }else{
    console.log(222);
  }
})
// 同步
fs.readFileSync('./data/bbb.txt')
console.log(444);

结果  : 

 2.4 try-catch捕捉异常

同步代码本身无法报错,  fs.readFileSync('./aaa')

console.log(111)  可以通过try-catch捕获异常

try{

需要执行的同步代码

}.catch(err){

throw err

//抛出异常}

try{
let data=fs.readFileSync('./data/aaa.txt')
console.log(data)
}.catch(err){
throw err
}

2.5 path模块

2.51 nodejs相对路径

1.前端相对路径./与 后端的node.js相对./ 是不同的规则

  前端 ./ :固定的 ,永远相对于当前文件所在的路径.

  后端 ./ :不固定,相对于执行node命令所在的文件夹路径

        *你在哪里执行node, ./就是哪个文件夹

2. node.js中文件读写,不能使用相对路径 ./ ,而应该用绝对路径

  解决方案 : node环境中,每一个js模块默认有两个全局变量,用于获取文件绝对路径.

__dirname :当前js模块所在文件夹的绝对路径

__filename :当前js模块自身的绝对路径

//导入模块
const fs=require('fs')
console.log(__dirname)///前端的
console.log(__filename)
//读取数据
fs.readFile(__dirname+'/aaa.txt','utf8',(err,data)=>{
if(err){
throw err
}else{
console.log(data)
}
})

2.52 path模块拼接路径js

//导入path模块
const path=require('path')

//使用模块

/*  拼接文件  如果文件名写错,path模块会自动帮你纠正*/
let path1=__dirname+'/aaa.txt'
console.log(path1)

let path2=path.join(__dirname,'/aaa.txt')
console.log(path2)

04 http模块

4.1http模块搭建服务器

1.导入http模块

const http=require('http')

2.创建服务器

const app=http.creatServer((req,res)=>{

//(1) 请求:req

console.log(req.url)

//解析中文

console.log(decodeURI(req,url)) 

})

3.开启服务器

app.listen(3000,'127.0.0.1',()=>{

console.log('服务器开启成功')

})

// 导入http模块
const http=require('http')

// 2.创建服务器(运行软件)
/*
req :request 请求报文 (请求行,请求头,请求体)
res.response  响应报文(响应行,响应头,响应体)
回调执行条件 :客户端给服务器发送请求的时候会执行(发一个请求,就执行一次,会执行多次)

*/
const app=http.createServer((req,res)=>{
  // (1)请求 :req
  console.log(req.url);
  // 当url中有中文的时候,http会进行特殊编码,服务器需要解码之后才能看到中文
  console.log(decodeURI(req.url)) //解析中文
  // (2)处理 :增删改查
  // (3)响应 :res
})


// 3.开启服务器(启动软件)
// 第一个参数 port 端口号
// 一台电脑只有一个id,但是有很多软件都能访问网络
// 第二个参数 hostname主机名(IP地址) 如果不谢,nide.js会自动识别本机ip
// 本机ip  http://127.0.0.1    查找自己ip   在cmd打开ipconfig
// 第三个参数:完成回调
app.listen(3000,()=>{
  console.log('服务器启动成功')
})

4.2 http模块响应服务器

导入http模块

const http=require('http')

创建服务器

const app=http.createServer((req,res)=>{

//请求

console.log(req.url)

//处理

//响应

//如果是中文,浏览器会显示乱码,需要设置请求头服务器告诉浏览器我给你的数据是什么格式

ressetHeader('Content-type','txt/plain;charset=utf8]')

res.end('今晚请你吃虾子')

})

开启服务器

app.listen(3000,()=>{

console.log('开启服务器成功')

})

//1.导入http模块
const http = require('http')

//2.创建服务器
const app = http.createServer((req,res)=>{
    //(1)req : 请求
    console.log( decodeURI(req.url) )//解析url中的中文
    
    //(2)处理 :
    //(3)res : 响应
    //如果是中文,浏览器会显示乱码。 需要设置响应头 : 服务器告诉浏览器我给你的数据是什么格式
    res.setHeader('Content-type','text/plain;charset=utf8')
    res.end("今晚请你吃虾子")
})

//3.开启服务器
app.listen(3000,()=>{
    console.log('服务器开启成功')
})

 4.3根据不同路径相应不同数据

//1 导入http模块
const http=require('http')

//2 创建服务器
const app=html.createServer((req,res)=>{
//请求
console.log(req.url)
//处理
if(req.url == '/'){
res.end('index.html')
}else if(req.url=='login.html'){
res.end('我是登录页')
}else{
res.end('404 not found')
}
//响应
res.end('今晚请你吃虾子')
})

3 开启服务器
app.listen(3000,()=>{
console.log('服务器开启成功')
})

 4.4node.js响应html文件

//1.导入模块
const http = require('http')
// 导入fs模板
const fs=require('fs')
// 1导入path模板
const path=require('path')
//2.创建服务器
const app = http.createServer((req,res)=>{
  // (1) req请求
  console.log(decodeURI(req.url))
  // (2)处理 :根据不同路径响应不同的数据
  if(req.url=='/'){
    fs.readFile(path.join(__dirname,'index.html'),(err,data)=>{
     if(err){
       throw err
     }else{
       res.end(data)
     }
    })
   
  }else if (req.url == '/login') {
     // (3)res :响应
    // 如果是中文,浏览器会显示乱码.需要设置响应头 :服务器告诉浏览器我给你的数据是什么格式
    fs.readFile(path.join(__dirname, 'login.html'), (err, data) => {
        if (err) {
            throw err
        } else {
            //(3)响应
            res.end(data)
        }
    })
}else{
    // 如果上面的额路径都不对,一般就代表错误的路径
    res.end('404 not found')
  }
})

//3.开启服务器
app.listen(3000,()=>{
  console.log('服务器开启成功')
})

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值