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


    目录

    为什么要学习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)导包:

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

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

    2.服务端如何使用 模块

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

    读取文件

    1. // (1)导入模块
    2. const fs = require('fs');//node.js安装在c盘不写路径,直接写fs,可以找到路径
    3. // console.log(fs);//fs是一个对象,有许多方法
    4. // (2)使用方法
    5. /**
    6. @description:读取文件
    7. @param {string} path:文件路径
    8. @param {string} encoding :文件编码 默认:二进制 utf8 中文
    9. @param {function}(err,data)=>{ err:错误信息,data:读取到的数据}
    10. *
    11. * @return:
    12. */
    13. fs.readFile('./data/aaa.txt', 'utf8', (err, data) => {
    14. if (err) {//失败
    15. // console.log(err)
    16. throw err
    17. } else {//成功
    18. console.log(data)
    19. }
    20. })

    写入文件

    1. // (1)导入模块
    2. const fs = require('fs')
    3. // (2)使用模块
    4. /**
    5. @description:写入文件
    6. @param {string} path:文件路径
    7. @param {stringlbuffer} data:要写入的数据
    8. @param {string} encoding:文件编码,一般不传。nodejs会自动识别data设置正确的类型
    9. @param {function} err=>{ }
    10. @return:
    11. *
    12. */
    13. fs.writeFile('./data/bbb.txt', '爱仕达福利姬看是否', err => {
    14. if (err) {
    15. throw err
    16. } else {
    17. console.log('写入成功');
    18. }
    19. })

    同步与异步区别

    js从上往下解析代码流程

    1.判断是同步还是异步

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

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

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

    同步与异步区别(掌握)

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

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

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

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

     

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

    1. // 异步async 2.同步有序执行,异步无序执行
    2. /*异步操作
    3. 1.不会阻塞线程(性能高)
    4. 2.无序执行
    5. 3.有回调函数
    6. */
    7. fs.readFile('./data/aaa.txt', (err, data) => {//readfile是同步,后面的回调函数是异步
    8. if (err) {
    9. throw err
    10. } else {
    11. console.log(1)
    12. }
    13. }
    14. )
    15. fs.readFile('./data/aaa.txt', (err, data) => {
    16. if (err) {
    17. throw err
    18. } else {
    19. console.log(22)
    20. }
    21. }
    22. )
    23. fs.readFile('./data/aaa.txt', (err, data) => {
    24. if (err) {
    25. throw err
    26. } else {
    27. console.log(333)
    28. }
    29. }
    30. )
    31. fs.readFile('./data/aaa.txt', (err, data) => {
    32. if (err) {
    33. throw err
    34. } else {
    35. console.log(4444)
    36. }
    37. }
    38. )

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

    异步

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

    1. //同步操作
    2. /*
    3. 1.会阻塞线程(性能低)
    4. 2.有序执行
    5. 3.没有回调函数
    6. */
    7. const data0 = fs.readFileSync('./data/aaa.txt', 'utf8')
    8. console.log("0" + data0);
    9. const data1 = fs.readFileSync('./data/aaa.txt', 'utf8')
    10. console.log("1" + data1);
    11. const data2 = fs.readFileSync('./data/aaa.txt', 'utf8')
    12. console.log("2" + data2);

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

    同步

    try-catch捕捉异常

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

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

    2.try-catch语法:

    try{

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

    }catch(err){

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

    }

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

    1. try {
    2. for (let i = 0; i < 3; i++) {
    3. obj[i] = i * 7
    4. }
    5. } catch (err) {
    6. console.log(err)
    7. } finally {
    8. console.log('我执行了吗?');
    9. }

    path路径模块

     nodejs相对路径

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

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

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


     

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

    nodejs使用绝对路径:

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

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

    我们一般使用__dir目录

    1. console.log(__dirname);
    2. console.log("..............");
    3. console.log(__filename);

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

    dir和file

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

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

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

    path

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

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

    http模块

    http模块搭建服务器

    1. //1.导入模块(安装服务器软件phpstudy)
    2. const http = require('http')
    3. //2.创建服务器(开启软件窗口)
    4. //浏览器每发一次请求,回调函数就会执行一次
    5. const app = http.createServer((req, res) => {
    6. //1.req(request):请求报文
    7. console.log(req.url, decodeURI(req.url))
    8. //2.处理
    9. //3.res(response):响应报文
    10. })
    11. //3.开启服务器(点击软件窗口启动按钮)
    12. /**
    13. * @description:开启nodejs服务器
    14. * @param {number} :port:端口号
    15. *一个计算机只有一个网线,但是有很多应用程序都可以访问网络。所以为了便于管理,每一个应用程序在系
    16. 统中都有一个唯一的编号,端口号。(端口号:应用程序编号 0-65535
    17. * @param {string} :hostname:主机(ip地址)
    18. * @param {function} :()=>{//开启成功回调}
    19. * @return:
    20. */
    21. app.listen(3000, '192.168.1.8', () => {
    22. console.log('服务器开启成功');
    23. })

    http模块响应客户端请求

    浏览器请求

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

    1. //1.导入模块(安装服务器软件phpstudy)
    2. const http = require('http')
    3. //2.创建服务器(开启软件窗口)
    4. //浏览器每发一次请求,回调函数就会执行一次
    5. const app = http.createServer((req, res) => {
    6. //1.req(request):请求报文
    7. console.log(req.url, decodeURI(req.url))
    8. //2.处理
    9. //3.res(response):响应报文
    10. // 中文:设置响应头,服务器告诉浏览器我给你的数据是什么格式
    11. res.end('66666!!you get it!!')
    12. })
    13. //3.开启服务器(点击软件窗口启动按钮)
    14. //ip如果不写,默认就是本机ip:127.0.0.1
    15. app.listen(3000, () => {
    16. console.log('服务器开启成功');
    17. })

     

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

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

    1. //1.导入模块(安装服务器软件phpstudy)
    2. const http = require('http')
    3. //2.创建服务器(开启软件窗口)
    4. //浏览器每发一次请求,回调函数就会执行一次
    5. const app = http.createServer((req, res) => {
    6. //1.req(request):请求报文
    7. console.log(req.url, decodeURI(req.url))
    8. //2.处理
    9. if (req.url === '/index') {
    10. res.end('index')
    11. } else if (req.url === '/login') {
    12. res.end('login ')
    13. }else{
    14. res.end('404 NOT FOUND')
    15. }
    16. //3.res(response):响应报文
    17. })
    18. //3.开启服务器(点击软件窗口启动按钮)
    19. //ip如果不写,默认就是本机ip:127.0.0.1
    20. app.listen(3000, () => {
    21. console.log('服务器开启成功');
    22. })

     

     

    nodejs响应客户端html文件

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

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

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

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

    1. //1.导入模块
    2. const fs = require('fs');
    3. const http = require('http')
    4. //2.创建服务器(开启软件窗口)
    5. //浏览器每发一次请求,回调函数就会执行一次
    6. const app = http.createServer((req, res) => {
    7. //1.req(request):请求报文
    8. console.log(req.url, decodeURI(req.url))
    9. //2.处理
    10. if (req.url === '/index') {
    11. fs.readFile(`${__dirname}/index.html`, (err, data) => {
    12. if (err) {//失败
    13. throw err
    14. } else {//成功
    15. // 3.将读取的文件数据响应给客户端
    16. res.end(data)
    17. }
    18. })
    19. } else if (req.url === '/login') {
    20. fs.readFile(`${__dirname}/login.html`, (err, data) => {
    21. if (err) {//失败
    22. throw err
    23. } else {//成功
    24. // 3.将读取的文件数据响应给客户端
    25. res.end(data)
    26. }
    27. })
    28. } else {
    29. res.end('404 NOT FOUND')
    30. }
    31. //3.res(response):响应报文
    32. })
    33. //3.开启服务器(点击软件窗口启动按钮)
    34. //ip如果不写,默认就是本机ip:127.0.0.1
    35. app.listen(3000, () => {
    36. console.log('服务器开启成功');
    37. })

     

     

     

  • 相关阅读:
    qt 开发api文档地址
    IReport常见问题及处理方法
    Android选项卡TabHost
    公园设施3D可视化:游园新体验,触手可及的未来
    kubectl资源管理命令-陈述式
    WordPress 插件推荐:菜单缓存插件——Menu Caching
    数据分析技能点-独立性检验&拟合优度检验
    一言不合就重构
    Locust学习记录3-用户类属性【host attribute,tasks attribute】
    vue 之 Quill编辑器封装
  • 原文地址:https://blog.csdn.net/wusandaofwy/article/details/126726284