day3-node.js

day3-node.js

1-包管理配置文件

  • 运行npm install 命令安装包的时候,npm包管理工具会自动把包的名称和版本号,记录到package.json中

  • package.json文件中,有一个dependencies节点,专门用来记录您使用 npm install 命令安装了那些包

1.1-快速创建package.json
// 快速创建package.json命令
npm init -y
  • 上述命令只能在纯英文的目录下运行,所以,项目文件夹的名称一定要使用英文命名,不要使用中文,不能出现空格
1.2-卸载指定的包
// 快速卸载指定的包命令
npm uninstall 包的完整名称
1.3-安装所以的依赖包
// 安装所以的依赖包命令
npm install(或 npm i)
  • 执行 npm install 命令时,npm 包管理工具会优先读取 package.json 中的 dependencies节点

  • 读取到记录的所有依赖包名称和版本号之后,npm 包管理工具会把这些包一次性下载到项目中

1.4-卸载指定的包
// 卸载指定的包命令
npm uninstall 
  • 注意:npm uninstall 命令执行成功后,会把卸载的包,自动从 package.json 的 dependencies 中移除掉
1.5-devDependencies节点
  • 如果某些包只在项目开发阶段会用到,在项目上线之后不会用到,则建议把这些包记录到devDependencies 节点中。

  • 与之对应的,如果某些包在开发和项目上线之后都需要用到,则建议把这些包记录到dependencies 节点中。

// 完整命令
npm install 包名 --save-dev
// 简写命令

2-解决下包缓慢问题

2.1-更改包镜像源
// 查看当前的下包镜像源
npm config get registry
// 将下包的镜像源切换为淘宝镜像源
npm config set registry=https://registry.npmmirror.com/
//检查镜像源是否下载成功
npm config get registry
2.2-nrm工具
  • 为了更方便的切换下包的镜像源,我们可以安装nrm这个小工具,利用nrm提供的终端命令,可以快速查看和切换下包的镜像源。

  • 通过npm包管理器,将nrm安装为全局可用的工具

// 安装 nrm 工具命令
npm i nrm -g
// 查看所有可用的镜像源
nrm ls
// 将下包的镜像源切换为taobao镜像
nrm use taobao

3-包的分类&规范的包结构

3.1-项目包
  • 那些被安装到项目的node_modules目录中的包,都是项目包。

  • 开发依赖包(被记录到devDependencies节点中的包,只在开发期间会用到)

  • 核心依赖包(被记录到dependencies节点中的包,在开发期间和项目上线之后都会用到)

// 开发依赖包(会被记录到devDependencies节点下)
npm i 包名-D
// 核心依赖包(会被记录到dependencies节点下)
npm i 包名 
3.2-全局包
  • 在执行npm install命令时,如果提供了-g参数,则会把包安装为全局包。

  • 全局包会被安装到C\Users\用户目录VAppData\Roaming\npm\node_modules目录下

// 全局安装指定的包
npm i 包名-g 
// 卸载全局安装的包
npm uninstall包名-g  
注意:
  • 只有工具性质的包,才有全局安装的必要性。因为它们提供了好用的终端命令。

  • 判断某个包是否需要全局安装后才能使用,可以参考官方提供的使用说明即可。

3.3-i5ting_toc工具
  • i5ting_toc是一个可以把 md文档转为 html页面的小工具
// 将 i5ting _toc 安装为全局包
npm install -g i5ting_toc
  • 调用i5ting_toc,轻松实现md 转 html 的功能
// md 转 html 命令
i5ting_toc -f 要转换的md文件路径 -o
3.4-规范的包结构
一个规范的包,它的组成结构,必须符合以下3点要求:
  • 包必须以单独的目录而存在

  • 包的顶级目录下要必须包含package.json这个包管理配置文件

  • package.json 中必须包含name,version,main这三个属性,分别代表包的名字、版本号、包的入口。

注意:
  • 以上3点要求是一个规范的包结构必须遵守的格式

  • 关于更多的约束,可以参考网址 https://yarnpkg.com/zh-Hans/docs/package-json

3.5-登录npm账号
  • npm 账号注册完成后,可以在终端中执行 npm login 命令,依次输入用户名、密码、邮箱后,即可登录成功。
3.6-发布&删除包
发布包
  • 将终端切换到包的根目录之后,运行 npm publish 命令,即可将包发布到 npm 上(注意:包名不能雷同)。
// 发布包命令
npm publish 要发布的包名称
删除包
  • 运行 npm unpublish 包名 --force 命令,即可从 npm 删除已发布的包。
// 删除包命令
npm unpublish 包名--force
注意:
  • npm unpublish 命令只能删除72小时以内发布的包

  • npm unpublish 删除的包,在24小时内不允许重复发布

  • 发布包的时候要慎重,尽量不要往npm上发布没有意义的包

3.7-编写一个完整的包
构建完整的文件夹 itheima-tools
  • 编写 index.js 文件

    //这是包的入口文件
    const date = require('./src/dateFormat')
    const escape = require('./src/htmlEscape')
    //向外暴露需要的成员
    module.exports = {
        //利用扩展运算符展开对象进行挂载
        ...date,
        ...escape
    }
    
  • 编写 package.json 文件

    {
        "name": "itheima-tools", 
        "version": "1.0.0",
        "main": "./index.js",
        "description": "提供了格式化时间、HTMLEscape相关的功能",
        "keywords": ["itheima","dateFormat","escape"],
        "license": "ISC"
    }
    
  • 编写 README.md 文件

  • 在这里插入图片描述

在 itheima-tools 文件目录下创建 src文件并编写功能文件
  • 编写 dateFormat.js

    //定义格式化时间函数
    function dateFormat(dateStr) {
        const dt = new Date(dateStr)
    
        const y = dt.getFullYear()
        const m = padZero(dt.getMonth() + 1)
        const d = padZero(dt.getDate())
    
        const hh = padZero(dt.getHours())
        const mm = padZero(dt.getMinutes())
        const ss = padZero(dt.getSeconds())
    
        return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
    }
    
    //定义一个补零的函数
    function padZero(n) {
        return n > 10 ? n : '0'+n
    }
    
    module.exports = {
        dateFormat
    }
    
  • 编写 htmlEscape.js

    //定义转义html字符的函数
    function htmlEscape(htmlstr) {
        return htmlstr.replace(/<|>|"|&/g,(match)=>{
            switch (match) {
                case '<':
                    return '<'
                case '>':
                    return '>'
                case '"':
                    return '"'
                case '&':
                    return '&'
            }
        })
    }
    //定义还原html字符串函数
    function htmlUnEscape(str) {
        return str.replace(/<|>|"|&amp/g,(match)=>{
            switch (match) {
                case '<':
                    return '<'
                case '>':
                    return '>'
                case '"':
                    return '"'
                case '&':
                    return '&'
            }
        })
    }
    
    module.exports = {
        htmlEscape,
        htmlUnEscape
    }
    

4-模块的加载机制

  • 模块在第一次加载后会被缓存。这也意味着多次调用require(不会导致模块的代码被执行多次。

  • 注意:不论是内置模块、用户自定义模块、还是第三方模块,它们都会优先从缓存中加载,从而提高模块的加载效率。

4.1-内置模块加载机制
  • 内置模块是由Node.js 官方提供的模块,内置模块的加载优先级最高。
4.2-加载自定义模块
  • 使用require()加载自定义模块时,必须指定以.或…开头的路径标识符。在加载自定义模块时,如果没有指定.或…这样的路径标识符,则 node会把它当作内置模块或第三方模块进行加载。

  • 在使用require()导入自定义模块时,如果省略了文件的扩展名,则Node.js 会按顺序分别尝试加载以下的文件:按照确切的文件名进行加载

    补全.js扩展名进行加载补全

    补全.json扩展名进行加载补全

    补全.node扩展名进行加载

    加载失败终端报错

4.3-第三方模块的加载机制
  • 如果传递给require()的模块标识符不是一个内置模块,也没有以"./“或”."开头,则Nodejs 会从当前模块的父目录开始,尝试从/node_modules文件夹中加载第三方模块。
4.4-目录作为模块
当把目录作为模块标识符,传递给require)进行加载的时候,有三种加载方式:
  • 在被加载的目录下查找一个叫做package.json 的文件,并寻找 main属性,作为 require(加载的入口)

  • 如果目录里没有package.json文件,或者main 入口不存在或无法解析,则Node.js将会试图加载目录下的index.js 文件。

  • 如果以上两步都失败了,则Node.js 会在终端打印错误消息,报告模块的缺失:Error:Cannot find module ‘xoo’

5-Express

5.1-概念
  • 官方给出的概念:Express是基于Node.js 平台,快速、开放、极简的Web开发框架。

  • 通俗的理解: Express 的作用和Node.js 内置的 http模块类似,是专门用来创建Web 服务器的。

  • Express的本质:就是一个npm 上的第三方包,提供了快速创建Web服务器的便捷方法。

  • Express的中文官网: http://www.expressjs.com.cn/

  • 安装:Express

    npm i express@4.17.1
    
5.2-使用express创建web基本服务器
  • 导入 express

    const express = require('express')
    
  • 创建 web 服务器

    const app = express()
    
  • 启动 web 服务器

    app.listen(8080,() => {
        console.log('express server running at http://127.0.0.1:8080')
    })
    
5.3- get() & post() 方法
通过app.get()方法(app.post()与之类似),可以监听客户端的GET请求,具体的语法格式如下:
  • 参数1:客户端请求的URL地址

  • 参数2:请求对应的处理函数

    req:请求对象(包含了与请求相关的属性与方法)

    res:响应对象(包含了与响应相关的属性与方法)

    app.get('请求URL',function(req,res){/*处理函数*/ })
    
res.send()方法 & req.query对象
  • 通过res.send()方法,可以把处理好的内容,发送给客户端

    //4.监听客户端的 get 和 post 请求,并向客户端响应具体内容
    app.get('/user',(req,res)=>{
        //调用expres 提供的 res.send() 方法,向客户端响应一个 JSON 对象
        res.send({name:'zs',age:20,gender:'男'})
    })
    app.post('/user',(req,res)=>{
        //调用express 提供的 res.send() 方法,向客户端响应一个文字字符串
        res.send('请求成功')
    })
    
  • 通过req.query对象,可以访问到客户端通过查询字符串的形式,发送到服务器的参数

    req.query默认是一个空对象

    客户端以 ?name=zs&age=20 这种查询字符串形式,发送到服务器的参数,可以通过req. query对象访问到

    例如:req.query.name req.query.age

    app.get('/',(req,res) => {
        //通过 req.query 可以获取到客户端发送过来的 查询参数
        //注意:req.query默认是一个空对象
        console.log(req.query)
        res.send(req.query)
    })
    
5.4-获取 URL中的动态参数
  • 通过req.params对象,可以访问到URL中,通过:匹配到的动态参数:

  • URL地址中,可以通过:参数名的形式,匹配动态参数值

  • req.params默认是一个空对象

    //注意:这里的 :id 是一个动态的参数
    app.get('/user/:ids/:name',(req,res) => {
        //req.params 是动态匹配到的 url 参数
        //req.params默认是一个空对象
        console.log(req.params)
        res.send(req.params)
    })
    
5.5-express-静态资源处理
  • express.static(),通过它,我们可以非常方便地创建一个静态资源服务器,

    //在这里,调用express.static()方法,快速对外提供静态资源
    app.use(express.static('./clock'))
    app.use(express.static('./files'))
    //如果希望在托管的静态资源访问路径之前,挂载路径前缀,则可以使用如下的方式:
    app.use('./clock',express.static('./clock'))
    
注意:
  • Express在指定的静态目录中查找文件,并对外提供资源的访问路径。因此,存放静态文件的目录名不会出现在URL中。

  • 如果要托管多个静态资源目录,请多次调用express.static()函数:

  • 访问静态资源文件时,express.static()函数会根据目录的添加顺序查找所需的文件。

5.6-nodemon工具
  • 在终端中,运行如下命令,即可将nodemon安装为全局可用的工具

    // 将nodemon安装为全局可用的工具命令
    npm install -g nodemon
    
在使用nodemon时发生错误nodemon
  • 无法加载文件 C:\Program Files\nodejs\node_global\nodemon.ps1,因为在此系统上禁止运行脚本。
解决办法
  • 以管理员身份运行vscode(选中图标,右键)

  • 在vscode终端输入get-ExecutionPolicy ,如果返回Restricted,表示状态是禁止的。

  • 在vscode终端输入set-ExecutionPolicy RemoteSigned,便可以使用nodemon
    在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值