node.js基础

本文介绍了学习Node.js的意义,包括提升与后台沟通效率,理解服务端特性和全栈基础。重点讲解了Node.js环境安装、REPL与nodemon、服务端与客户端JS区别、模块化、fs模块操作及http模块搭建服务器等内容。
摘要由CSDN通过智能技术生成

nodejs入门

1.1-学习NodeJS的意义

1.1.1-服务器相关

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

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

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

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

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

1.1.2-框架前置课

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

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

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

1.2-什么是nodejs

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

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

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

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

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

    • 说人话: 做后台的,抢java和python饭碗

1.3-Node.js环境安装

1.3.1-如何确认当前电脑是否已经安装了Node环境

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

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

1.3.2-npm介绍

  • 1.npm

    • 全称node package manager

    • 官方推出的包管理工具

    • 不需要额外安装,安装node之后自带

    • 因为服务器不在国内,所以有时候安装特别慢,甚至无法成功

  • 2.npm更改镜像源提升网速

    • 打开终端执行命令修改镜像源 npm config set registry https://registry.npm.taobao.org/

    • 查看当前npm得镜像源:npm config list

==1.3-如何运行Node.js程序==

  • 1.REPL:交互解释器

    • Node运行环境的另一种叫法,作用是解析执行js代码

    • 用法

      • 第一种方式:直接双击打开 node.exe,然后写js代码

      • 第二种方式:

        • 先在终端先执行node,进入node环境

        • 然后写js代码

  • 2.使用终端命令node [js文件路径]开始运行js文件

    • (1)其实当我们在终端执行Node命令时,并不是我们终端去编译解释js代码,而是电脑会自动打开Node安装包中Node.exe应用程序来打开js文件

      • Node.exe是一个类似于终端的应用程序,没有界面(CLI程序:command-line interface,命令行界面)

      • Node.exe工作环境称之为REPL环境,也就是交互式解释器

    • (2)REPL才是真正解释执行我们js代码的解释器

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

    3.nodemon

  • 安装: npm install -g nodemon

    • 使用:nodemon [js文件名]

1.4-服务端js与客户端js区别

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

    • ECMAScript:确定js的语法规范

    • DOM:js操作网页内容

    • BOM:js操作浏览器窗口

  • 2.服务端JS只有ECMAScript

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

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

1.5-nodejs模块化介绍

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

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

    • 说人话:

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

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

02-fs模块

1.1-fs文件模块(读写文件)

1.1.1-readFile读取文件

//1.导入文件模块
const fs = require('fs')
​
//2.读取文件
​
/**
 * 第一个参数:文件路径
 * 第二个参数:编码格式 (可选参数,默认为buffer二进制)
 * 第三个参数:读取回调操作(异步操作)
    * err:如果读取成功,err为null,  否则读取失败(一般文件路径错误或者找不到文件)
    * data:读取到的数据
 */
fs.readFile('./data/aaa.txt','utf-8',(err,data)=>{
    if(err){
        console.log(err)
        //抛出异常,throw的作用就是让node程序终止运行,方便调试
        throw err
    }else{
        console.log(data)
    }
})
​
console.log('11111')
​
//3.同步读取文件(了解即可,几乎不用,一般在异步的api后面加上Sync就是同步)
​
let data = fs.readFileSync('./data/aaa.txt','utf-8')
console.log(data)
​
console.log('2222')

1.1.2-writeFile写入文件

//1.导入文件模块
const fs = require('fs')
​
//2.写文件
​
/**
 * 第一个参数:文件路径
 * 第二个参数:要写入的数据
 * 第三个参数:文件编码 默认utf-8
 * 第四个参数: 异步回调函数
    * err:  如果成功,err为null.否则读取失败
 */
fs.writeFile('./data/bbb.txt','黑马程序员','utf-8',(err)=>{
    if(err){
        throw err
    }else{
        console.log('写入成功')
    }
})

1.2-同步与异步区别(掌握)

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

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

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

//1.导入模块
const fs = require('fs')
​
/*js从上往下解析代码流程
    1.判断是同步还是异步
    2.如果是同步,则立即执行
    3.如果是异步,则不执行,而是放入事件循环中(Event Loop)
    4.所有代码解析完毕之后,开始执行事件循环中的异步代码
​
*/
​
/*异步操作
1.不会阻塞线程(性能高)
2.无序执行
3.有回调函数 
*/
​
//异步操作
// console.log('55555555');
// fs.readFile('./data/aaa.txt','utf8',(err,data)=>{
//     console.log('1111111')
    
//     if(err){
//         throw err
//     }else{
//         // console.log(data)
//     }
// })
​
​
// console.log('666666');
// fs.readFile('./data/aaa.txt','utf8',(err,data)=>{
//     console.log('222222')
    
//     if(err){
//         throw err
//     }else{
//         // console.log(data)
//     }
// })
​
// console.log('777777');
// fs.readFile('./data/aaa.txt','utf8',(err,data)=>{
//     console.log('333333')
    
//     if(err){
//         throw err
//     }else{
//         // console.log(data)
//     }
// })
​
// console.log('8888888')
// fs.readFile('./data/aaa.txt','utf8',(err,data)=>{
//     console.log('4444444')
    
//     if(err){
//         throw err;
//     }else{
//         // console.log(data)
//     }
// })
​
​
//同步操作
/* 1.会阻塞线程(性能低)
    2.有序执行
    3.没有回调函数
 */
let data1 = fs.readFileSync('./data/aaa.txt','utf8');
console.log(data1)
console.log('11111')
​
let data2 = fs.readFileSync('./data/aaa.txt','utf8');
console.log('22222')
console.log(data2)
​
let data3 = fs.readFileSync('./data/aaa.txt','utf8');
console.log('33333')
console.log(data3)
​
let data4 = fs.readFileSync('./data/aaa.txt','utf8');
console.log('44444')
console.log(data4)

1.3-try-catch捕捉异常(了解)

//1.导入模块
const fs = require('fs')
​
​
/* try-catch作用:捕捉代码异常,且不影响后面代码执行 
​
try{
    需要执行的代码
}catch(err){
    如果try中的代码执行错误了,就会执行catch代码
})
​
*/
​
try {
    let data1 = fs.readFileSync('./data/aaa.txt', 'utf8')
    console.log(data1)
} catch (err) {
    console.log(err)
}
​
console.log('11111')

  • fs模块一些方法

API作用
fs.access(path, callback)判断路径是否存在
fs.appendFile(file, data, callback)向文件中追加内容
fs.copyFile(src, callback)复制文件
fs.mkdir(path, callback)创建目录
fs.readDir(path, callback)读取目录列表
fs.rename(oldPath, newPath, callback)重命名文件/目录
fs.rmdir(path, callback)删除目录
fs.stat(path, callback)获取文件/目录信息
fs.unlink(path, callback)删除文件
fs.watch(filename, options)监视文件/目录
fs.watchFile(filename[, options], listener)监视文件
fs.existsSync(absolutePath)判断路径是否存在

03-path路径模块

1.1-nodejs中的相对路径介绍

  • node中的相对路径: ./ 不是相对于当前文件所在路径,而是相对于执行node命名的文件夹路径

    在服务端开发中,一般不要使用相对路径,而使用绝对路径

  • 解决方案:在nodejs中,每一个js文件都有两个全局属性,它可以帮助我们获取到文件的绝对路径

    • __filename:当前js文件所在目录的绝对路径

    • __dirmame:当前js文件的绝对路径

//1.导入文件模块
​
const fs = require('fs')
​
//2.读取文件
​
/*a.注意点: node中的相对路径: ./  不是相对于当前文件所在路径,而是相对于执行node命名的文件夹路径
在服务端开发中,一般不要使用相对路径,而使用绝对路径
  b.解决方案:在nodejs中,每一个js文件都有两个全局属性,它可以帮助我们获取到文件的绝对路径
    __filename:当前js文件所在目录的绝对路径
    __filema,e:当前js文件的绝对路径
*/
console.log(__dirname)
console.log(__filename)
​
/*2.如果想要获取当前文件夹下其他文件绝对路径,可以使用 __dirname属性来拼接
*/
​
const path = __dirname + '/aaa.txt'
console.log(path)
​
fs.readFile(path,'utf-8',(err,data)=>{
    if(err){
        console.log(err);
        //抛出异常,throw的作用就是让node程序终止运行,方便调试
        throw err
    }else{
        console.log(data)
    }
})
​
​

1.2-path路径模块拼接路径

//1.导入路径模块
const path = require('path')
​
//2.合并路径
​
/*使用path模块拼接文件路径与  使用 '+'连接符拼接的好处
    1.会自动帮我们正确添加路径分隔符  '/',我们无需手动添加
    2.当我们路径格式拼接错误的时候,能自动帮我们转换正确的格式
*/
​
// path.join(路径1,路径2,路径3,……………………)
let filePath = path.join(__dirname,'aaa.txt')
console.log(filePath)
​
console.log(__dirname + '/aaa.txt')
​
let path1 = path.join(__dirname,'bbb','ccc.txt')
console.log(path1);
​
//获取上级目录   path.dirname(文件路径)
let path2 = path.dirname(path1)
console.log(path2)
​
let path3 = path.dirname(path2)
console.log(path3)
​
let path4 = path.dirname(path3)
console.log(path4)
​

  • path模块一些方法

方法作用
path.basename(path[, ext])获取返回 path 的最后一部分(文件名)
path.dirname(path)返回目录名
path.extname(path)返回路径中文件的扩展名(包含.)
path.format(pathObject)将一个对象格式化为一个路径字符串
path.join([...paths])拼接路径
path.parse(path)把路径字符串解析成对象的格式
path.resolve([...paths])基于当前工作目录拼接路径

04-http模块(搭建服务器)

1.1-http模块搭建服务器

//知识点回顾:  如何让你电脑成为服务器?  按照软件即可
​
//1.导入模块(安装软件)
const http = require('http')
​
//2.创建服务器(运行软件)
​
/* 参数:回调函数
    req: request 客户端请求对象
    res:response 服务端响应对象
 */
let server = http.createServer((req,res)=>{
    //获取客户端请求路径
    console.log(req.url)
})
​
//3.启动服务器(开启软件的服务器功能)
​
/*第一个参数:端口号  一般1000-60000之间
第二个参数:ip地址  默认不写 就是本地ip 
第三个参数:成功回调
 */
server.listen(3000,()=>{
    console.log('服务器开启成功')
})

1.2-响应客户端请求

/* WEB开发本质
    请求
    处理
    响应
*/
​
//1.导入模块
const http = require('http')
//2.创建服务器
/* 
req:请求对象 负责处理客户端请求
res:响应对象 负责响应客户端请求
*/
let server =  http.createServer((req,res)=>{
    //客户端每发送一个请求,这个函数都会执行一次(执行多次)
    console.log(req.url)
    //响应客户端数据
    res.end('hello world')
})
​
//3.启动服务器
server.listen(3000,()=>{
    console.log('服务器开启成功')
})

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

//1.导入模块
const http = require('http');
//2.创建服务器
let server =  http.createServer((req,res)=>{
    console.log(req.url)
    //需求: 如果请求路径是/ ,响应  index   如果请求路径是/login,响应 登录页
    if(req.url == '/'){
        res.end('index.html')
    }else if(req.url == '/login'){
        //设置响应头解决中文乱码问题: 响应头作用:告诉浏览器我返回给你的数据是什么类型
        /*第一个参数:状态码
        第二个:响应头 
        */
        res.writeHead(200,{
            'Content-Type': 'text/plain;charset=utf-8'// text/plain 普通文本
        })
        res.end('登录页')
    }else{
        res.end('404 not found')
    }
​
})
​
//3.开启服务器
server.listen(3000,()=>{
    console.log('服务器开启成功')
})

1.4-http响应客户端HTML文件

//1.导入模块
const http = require('http')
//文件模块
const fs = require('fs')
//路径模块
const path = require('path')
​
​
​
//2.创建服务器
let server =  http.createServer((req,res)=>{
    //需求:  如果请求路径是 / 返回首页html  如果是login返回登录html
​
    //1.获取客户端请求路径
    let url = req.url
​
    //2.处理请求
    //一般如果响应的是文件,不需要设置响应头,直接返回二进制数据。浏览器会自动识别数据类型并且加载
    if(url == '/'){
        //响应首页
        fs.readFile(path.join(__dirname,'index.html'),(err,data)=>{
            if(err){
                throw err
            }else{
                console.log(data)
                //3,将读取好的文件数据响应给客户端
                res.end(data)
            }
        })
    }else if(url == '/login'){
        //响应登录页
        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.开启服务器
server.listen(3000,()=>{
    console.log('服务器开启成功')
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值