node 框架 模块化开发 fs模板 path模板 http模板 开发项目

8 篇文章 0 订阅
2 篇文章 0 订阅

01-nodejs入门

1.1-框架前置课

==圈重点== : 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环境安装

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

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

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

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

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

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

    • ECMAScript:确定js的语法规范

    • DOM:js操作网页内容

    • BOM:js操作浏览器窗口

  • 2.服务端JS只有ECMAScript

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

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

1.6-nodejs模块化介绍

  • 1.什么叫模块化?(模块 === js文件)

    • 模块化就是把一个大的文件拆分成很多个小文件,用特定的语法将各个文件(模块)组合到一起

    • 一个js文件可以引入另一个文件, 这种开发方式就叫做模块化开发

  • 2.模块化开发好处?

    • (1)将功能分离出来

      • 一个js文件只负责处理一个功能,这样做的好处是业务逻辑清晰,便于维护

    • (2)按需导入

      • 用到哪一个功能,就导入哪一个js文件。模块化开发是渐进式框架的共同特征。

    • (3)避免变量污染

      • 一个js文件(模块),都是一个独立的作用域。 互不干扰,不用考虑变量名冲突问题。

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

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

    • 说人话:

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

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

1.7-Common模块化语法规范

  • 任何一个语法,都需要遵循一定的规范。不同的平台需要遵循的规范不同。一般情况下,模块化语法规范主要有三种。

  • CommonJS 规范:nodejs 默认支持的

  • ES6规范:前端的ES6语法支持的规范

  • CMD 和 AMD 模块化规范 : ES6语法之前的模块化语法规范,现在已经几乎不用了

  • CommonJS规范只有两句话

    • 1.模块必须要使用 require() 导入

    • 2.模块必须要使用 module.exports 导出

      • 这两个语法都是nodejs环境自带的全局语法

02-fs模块

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.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('写入成功')
    }
})

03-path路径模块

语法作用
path.==extname==(path)返回路径中文件的扩展名(包含.)
path.==join==([...paths])拼接路径(相对路径)
path.resolve([...paths])拼接路径(绝对路径)
__dirname获取当前文件所在的文件夹绝对路径
//1.导入path模块
const path = require('path')
​
​
//2.使用模块
​
// (1) 获取一个文件的拓展名
/* 不关心此路径文件在不在, 就是处理这个字符串。 获取.后面的部分可以知道这个文件格式 */
console.log(path.extname('./data/student.json'));
console.log(path.extname('./data/student.js'));
console.log(path.extname('./data/111.png'));
console.log(path.extname('./data/222.aaa'));
​
// (2) 拼接相对路径, 使用join方法
/* 把多个字符串按照路径的方式拼接起来 */
console.log(path.join('a', 'b', 'c'))
​
// (3) 拼接绝对路径
/* 默认从磁盘根目录开始拼接出完整的路径 */
console.log(path.resolve('a', 'b', 'c'))
​
/* (4)获取当前文件所在的绝对路径 */
console.log( __dirname )
​
​
​

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-根据不同请求响应不同数据

默认情况下,浏览器会自动根据文件后缀名进行识别。但是有的文件并不一定可以正确识别,所以一般情况下需要给文件设置对应的响应头。Content-Type类型 (MIME媒体类型)

  • html文件: text/html

  • css文件: text/css

  • js文件: text/javascript

  • gif文件: image/gif

  • svg文件: image/svg+xml

  • jpeg文件: image/jpeg

  • png文件: image/png

  • icon文件: image/x-icon

设置响应头语法如下:res.setHeader('Content-Type', ‘text/html; charset=utf-8');

//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.3-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('服务器开启成功')
})

05-综合案例:天天果园

/* 
WEB特点01 :  html中所有的外部资源(src href)都会变成网络请求
    * 要想HTML页面可以加载静态资源(css、图片、音视频),服务器就需要响应这些文件
WEB特点02 :  静态资源网络请求url 一般与 文件路径 一致, 一般会自动拼接文件路径响应返回
    * 静态资源服务器 : 自动响应返回页面每一个静态资源请求
*/
​
//1.导入http模块
const http = require('http')
const fs = require('fs')
const path = require('path')
​
//2.创建服务器
const app = http.createServer((req,res)=>{
    //(1)请求 : req
    console.log( req.url )
    //(2)处理 
    if( req.url == '/' ){
        //响应 首页
        fs.readFile( path.join(__dirname,'www','index.html') , (err,data)=>{
            if(err){
                throw err
            }else{
                res.end(data)
            }
        }) 
    }else{
        //根据请求的url拼接读取对应文件的路径并返回
        fs.readFile( path.join(__dirname,'www',decodeURI(req.url)) , (err,data)=>{
            if(err){
                throw err
            }else{
                res.end(data)
            }
        } )
    }
})
​
//3.开启服务器
app.listen(3000,()=>{
    console.log('服务器开启成功')
})

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值