[node.js] node.js下载与安装;nodejs模块化介绍;同步与异步区别try-catch捕捉异常;fs模块;path路径模块;http模块

发布于:2022-12-27 ⋅ 阅读:(425) ⋅ 点赞:(0)

目录

为什么要学习node.js

服务器相关

框架前置课

什么是node.js

node.js下载与安装

 nodejs如何运行

服务端js与客户端js区别

nodejs模块化介绍

fs模块

读取文件

写入文件

同步与异步区别

try-catch捕捉异常

path路径模块

nodejs相对路径

path模块作用:拼接文件路径(类似模板字符串),自动修复路径分割符错误

模板字符串需要自己拼接,自己保证格式准确

http模块


为什么要学习node.js

服务器相关

  • 1.了解客户端浏览器与服务端后台的交互过程,可以在以后的前端开发工作中与后台人员之间的沟通更加容易理解

    • 虽然以后工作中不一定用的上nodejs,但是通过对服务端开发的了解,能够让你在日常工作中与公司后台人员之间的沟通变得更加轻松

  • 2.了解服务端开发的一些特性,可以在以后的工作中,当我们前端与后台交互出现bug问题时,能够更快速的定位bug是出现在自己的客户端还是别人的服务端。

    • 作为一名前端人员,如果对后台不了解,那么以后在与后台交互的开发中有可能明明是后台的问题,但是由于自身对后台的不了解再加上前期的经验不足,导致解决问题的时间增加(加班)。

  • 3.了解服务端开发的过程,可以为以后的职业发展打下一定的基础(全栈工程师)

框架前置课

vue框架能够正常开发的前提是你的电脑必须要安装node环境

  • 1.nodejs作为vue框架之前的一个课程,在学习vue的过程中,需要使用nodejs相关的一些知识点。

  • 2.学习nodejs有助于为后续框架课程打下良好的基础

什么是node.js

  • 1.Node.js 是一个构建于 Chrome V8引擎之上的一个Javascript 运行环境

    • Node一个运行环境,作用是让js拥有开发服务端的功能

  • 2.nodejs的作用 : 使用js语言开发服务器

  •      Node.js做后台开发

node

node.js下载与安装

官方下载                    中文官方下载

node下载

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

cmd

 nodejs如何运行


1.打开node自带的REPL解释器
*原理:nodejs运行环境来执行js

node.js
2.打开电脑终端,执行命令:node [js文件名]
node:你的操作系统会自动开启node环境
[文件名]:你的操作系统会自动把这个文件的js代码,放入node环境执行

cmd
3.vscode:点击右键选择终端打开,输入:node文件名
原理和第2步骤一模一样的,只是用起来更加方便.

 vs code

服务端js与客户端js区别

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

    • ECMAScript:确定js的语法规范

    • DOM:js操作网页内容

    • BOM:js操作浏览器窗口

  • 2.服务端JS只有ECMAScript

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

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

nodejs模块化介绍

  • 1.nodejs是一个渐进式框架, 我们后面要学习的vue框架也是渐进式框架

  • 2.什么是渐进式框架呢 : 一个功能对应一个模块(js文件), 需要用的时候导入即可

    • 说人话:

      • 非渐进式框架 : 套餐, 一次性导入所有的功能。 无论是的项目用还是不用(浪费资源)

      • 渐进式框架 : 自助餐。 吃什么用什么,不浪费。(节省资源)

fs模块

1.前端如何使用第三方包

    (1)导包:<scriptsrc=“文件路径“></script>

    *导包原理:本质是得到一个全局对象,

    (2)用包:调用对象的方法

2.服务端如何使用 模块

    (1)导入模块: const 变量名=require('文件路径')

读取文件

// (1)导入模块
const fs = require('fs');//node.js安装在c盘不写路径,直接写fs,可以找到路径
// console.log(fs);//fs是一个对象,有许多方法

// (2)使用方法
/**
@description:读取文件
@param {string} path:文件路径
@param {string} encoding :文件编码 默认:二进制  utf8 中文
@param {function}(err,data)=>{ err:错误信息,data:读取到的数据}
*
* @return:
*/
fs.readFile('./data/aaa.txt', 'utf8', (err, data) => {
    if (err) {//失败
        // console.log(err)
        throw err

    } else {//成功
        console.log(data)
    }
})

写入文件

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

// (2)使用模块
/** 
@description:写入文件
@param {string} path:文件路径
@param {stringlbuffer} data:要写入的数据
@param {string} encoding:文件编码,一般不传。nodejs会自动识别data设置正确的类型
@param {function} err=>{ }
@return:
*

*/
fs.writeFile('./data/bbb.txt', '爱仕达福利姬看是否', err => {
    if (err) {
        throw err
    } else {
        console.log('写入成功');
    }
})

同步与异步区别

js从上往下解析代码流程

1.判断是同步还是异步

2.如果是同步,则立即执行

3.如果是异步,则不执行,而是放入事件循环中(Event Loop)

4.所有代码解析完毕之后,开始执行事件循环中的异步代码

同步与异步区别(掌握)

·1.同步会阻塞线程,异步不会

·2.同步有序执行,异步无序执行

·3.同步没有回调函数,异步有回调函数

    *异步一般都有回调,但不是所有的回调都是异步  数组的sort方法是回调但不是异步

 

 异步操作
1.不会阻塞线程(性能高)
2.无序执行
3.有回调函数

// 异步async 2.同步有序执行,异步无序执行
/*异步操作
1.不会阻塞线程(性能高)
2.无序执行
3.有回调函数
*/

fs.readFile('./data/aaa.txt', (err, data) => {//readfile是同步,后面的回调函数是异步
    if (err) {
        throw err
    } else {
        console.log(1)
    }
}
)
fs.readFile('./data/aaa.txt', (err, data) => {
    if (err) {
        throw err
    } else {
        console.log(22)
    }
}
)

fs.readFile('./data/aaa.txt', (err, data) => {
    if (err) {
        throw err
    } else {
        console.log(333)
    }
}
)
fs.readFile('./data/aaa.txt', (err, data) => {
    if (err) {
        throw err
    } else {
        console.log(4444)
    }
}
)

不是从上到下执行,并且每次执行顺序不同

异步

 同步操作
1.会阻塞线程(性能低)
2.有序执行
3.没有回调函数

//同步操作
/*
1.会阻塞线程(性能低)
2.有序执行
3.没有回调函数
*/

const data0 = fs.readFileSync('./data/aaa.txt', 'utf8')
console.log("0" + data0);
const data1 = fs.readFileSync('./data/aaa.txt', 'utf8')
console.log("1" + data1);
const data2 = fs.readFileSync('./data/aaa.txt', 'utf8')
console.log("2" + data2);

从上到下执行,每次输出相同

同步

try-catch捕捉异常

try-catch:用于捕捉代码的异常

*特点:代码出现爆红(语法错误),也不会对后面代码产生影响

2.try-catch语法:

try{

//代码:如果可以正常执行,就执行

}catch(err){

//如果try代码出现错误,就会执行catch代码。err就是错误信息

}

3.应用场景:当有一段代码,不确定能不能执行,希望它如果不能执行也不会影响后面代码。

try {
    for (let i = 0; i < 3; i++) {
        obj[i] = i * 7

    }
} catch (err) {
   console.log(err)  
} finally {
    console.log('我执行了吗?');
}

path路径模块

 nodejs相对路径

服务端相对路径./和前端相对路径./区别

1.前端./:相当于当前文件所在目录绝对路径(固定的,永远都是当前文件的目录路径)

2.服务端./:相对于当前执行node命令所在的路径(不固定,在哪里执行node,./就是哪个目录)


 

总结:在nodejs中,读取文件一般不能使用相对路径.只能用绝对路径

nodejs使用绝对路径:

__dirname:当前文件所在目录的绝对路径

__filename:当前文件自己的绝对路径

我们一般使用__dir目录

console.log(__dirname);
console.log("..............");
console.log(__filename);

下图中,第一个是__dirname,第二个是__filename

dir和file

path模块作用:拼接文件路径(类似模板字符串),自动修复路径分割符错误

// path模块作用:拼接文件路径(类似模板字符串),自动修复路径分割符错误
const path = require('path')
let newPath = path.join(__dirname,'aaa.txt')//自动修复路径分隔符
console.log(newPath)

自动在路径间增加/分隔符

path

模板字符串需要自己拼接,自己保证格式准确

fs.writeFile(`${__dirname}/aaa.txt`, '爱仕瓯江口姬看是否', err => {
    if (err) {
        throw err
    } else {
        console.log('写入成功');
    }
})

http模块

http模块搭建服务器

//1.导入模块(安装服务器软件phpstudy)

const http = require('http')
//2.创建服务器(开启软件窗口)
//浏览器每发一次请求,回调函数就会执行一次

const app = http.createServer((req, res) => {
    //1.req(request):请求报文
    console.log(req.url, decodeURI(req.url))
    //2.处理
    //3.res(response):响应报文

})
//3.开启服务器(点击软件窗口启动按钮)
/**
* @description:开启nodejs服务器
* @param {number} :port:端口号
*一个计算机只有一个网线,但是有很多应用程序都可以访问网络。所以为了便于管理,每一个应用程序在系
统中都有一个唯一的编号,端口号。(端口号:应用程序编号 0-65535)
* @param {string} :hostname:主机(ip地址)
* @param {function} :()=>{//开启成功回调}
* @return: 
*/
app.listen(3000, '192.168.1.8', () => {
    console.log('服务器开启成功');
})

http模块响应客户端请求

浏览器请求

http://"IP地址":"端口号"

//1.导入模块(安装服务器软件phpstudy)

const http = require('http')
//2.创建服务器(开启软件窗口)
//浏览器每发一次请求,回调函数就会执行一次

const app = http.createServer((req, res) => {
    //1.req(request):请求报文
    console.log(req.url, decodeURI(req.url))
    //2.处理
    //3.res(response):响应报文
    // 中文:设置响应头,服务器告诉浏览器我给你的数据是什么格式
    res.end('66666!!you get it!!')

})
//3.开启服务器(点击软件窗口启动按钮)
//ip如果不写,默认就是本机ip:127.0.0.1
app.listen(3000, () => {
    console.log('服务器开启成功');
})

 

根据不同请求响应不同数据

if分支语句判断请求报文的url,然后返回不同的响应报文res.end

//1.导入模块(安装服务器软件phpstudy)

const http = require('http')
//2.创建服务器(开启软件窗口)
//浏览器每发一次请求,回调函数就会执行一次

const app = http.createServer((req, res) => {
    //1.req(request):请求报文
    console.log(req.url, decodeURI(req.url))
    //2.处理

    if (req.url === '/index') {
        res.end('index')
    } else if (req.url === '/login') {
        res.end('login ')
    }else{
        res.end('404 NOT FOUND')
    }
    //3.res(response):响应报文

})
//3.开启服务器(点击软件窗口启动按钮)
//ip如果不写,默认就是本机ip:127.0.0.1
app.listen(3000, () => {
    console.log('服务器开启成功');
})

 

 

nodejs响应客户端html文件

(1)请求:前端发送请求

(2)处理:后端根据不同的请求路径,使用fs模块读取不同的html文件数据

(3)响应:后端把读取到的html数据响应给前端。前端浏览器渲染html文件

if分支语句判断请求报文的url,然后通过fs读取html文件返回不同的响应报文res.end


//1.导入模块
const fs = require('fs');
const http = require('http')
//2.创建服务器(开启软件窗口)
//浏览器每发一次请求,回调函数就会执行一次

const app = http.createServer((req, res) => {
    //1.req(request):请求报文
    console.log(req.url, decodeURI(req.url))
    //2.处理

    if (req.url === '/index') {
        fs.readFile(`${__dirname}/index.html`, (err, data) => {
            if (err) {//失败
                throw err
            } else {//成功
                // 3.将读取的文件数据响应给客户端
                res.end(data)
            }
        })
    } else if (req.url === '/login') {
        fs.readFile(`${__dirname}/login.html`, (err, data) => {
            if (err) {//失败
                throw err
            } else {//成功
                // 3.将读取的文件数据响应给客户端
                res.end(data)
            }
        })
    } else {
        res.end('404 NOT FOUND')
    }
    //3.res(response):响应报文

})
//3.开启服务器(点击软件窗口启动按钮)
//ip如果不写,默认就是本机ip:127.0.0.1
app.listen(3000, () => {
    console.log('服务器开启成功');
})

 

 

 

本文含有隐藏内容,请 开通VIP 后查看