node.js

这篇博客详细介绍了Node.js中的npm包管理,包括下载、配置、卸载及切换镜像源。同时,讲解了如何开发和发布自定义包,以及使用i5ting_toc工具。此外,还深入探讨了Express框架,展示了创建服务器、处理请求、获取URL参数及托管静态资源的基本操作。
摘要由CSDN通过智能技术生成

Node.js的学习记录

提示:根据视频学习的一些记录

一、day3的学习内容

1.npm与包

  • 1).下载包

    https://www.npmjs.com/ 全球最大的包共享平台,可以搜索我们需要的包
    https://registry.npmjs.org/ 是一个包共享的服务器,可以在这个服务器上下载我们需要的包

    使用 Node Package Manager (包管理工具)从https://registry.npmjs.org/下载我们做需要的包


  • 2).npm初体验

未使用npm,代码运如下(示例):

//文件名:11.dataFomat.js
//定义格式化时间的方法
function dataFomat(dtstr){
    const dt = new Date(dtstr)

    const y = padZero(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 > 9 ? n : '0' + n
}

//暴露方法
module.exports = {
    dataFomat
}
//文件名:test.js
//导入自定义的格式化时间的模块
const TIME = require('./11.dataFomat')

//调用方法,进行时间的格式化
const dt = new Date()
//console.log(dt)
const newDt = TIME.dataFomat(dt)
console.log(newDt)

使用npm,代码运如下(示例):
需要先安装指定名称的包(VScode 终端运行指令)
~npm install 包的完整名称(简写:npm i 包的完整名称)
安装某一个版本的话就是 npm install 包的完整名称@版本号(如:npm install @2.22.2)

运行结果:
PS D:\自学\node.js\day2\code> npm i moment
added 1 package, and audited 2 packages in 2s
found 0 vulnerabilities

//导入需要的包
//注意:导入的名称,就是装包时候的名称

const moment = require('moment')

const dt = moment().format('YYYY-MM-DD HH:mm:ss')
console.log(dt)
  • 3).包管理配置文件(package.json)

在Git上面下载的代码是没有node_modules(内有项目用到的所有包)这个文件夹的,所以,在Git下载项目后,应该运行 npm install这个命令(下载所有的包)。

  • a). dependencies中的包记录(核心依赖包):
     在开发和项目上线之后都需要用到的
     用法:默认导入包会放入dependencies节点中
    
    devDependencies中的包记录(开发依赖包):
     只在开发阶段会用到,在项目上线之后就不会用到
     用法:npm install 包名 --save-dev(简写:npm i 包名 -D)
    
    区别放入哪一个节点,就看相应包的官方文档里面的Install部分,会有相关的提示
    
  • 4).卸载包

只需要使用命令 npm uninstall 具体的包名称 来卸载包。


  • 5).切换npm的下包镜像源
  • 1.在终端输入 npm config get registry 来查看当前下包的服务器地址
  • 2.在终端输入 npm config set registry=https://registry.npm.taobao.org/ 就能将下包的服务器转换为淘宝镜像的服务器
  • 3.使用nrm小工具(在终端cmd运行相关指令)-视频P30
    a.通过 npm 包管理器,将nrm 安装为全局可用的工具 ( npm i nrm -g)
    b.查看所有可用的镜像源(nrm ls)
    c.将包的镜像源切换为其他的镜像(使用简称)-(nrm use taobao)
  • 6).全局包
    全局安装指定的包 (npm i 包名 -g)
    卸载全局指定的包 (npm uninstall 包名 -g)
  • i5ting_toc:是一个可以把md文档转换成html页面的小工具,使用步骤如下:
    1.npm install -g i5ting_toc (将i5ting_toc安装为全局包)
    2.i5ting_toc -f 要转换的文件路径 -o(调用i5ting_toc,轻松实现 md 转 html 的功能)
  • 7).开发属于自己的包
    文件夹中需要有三个文件,分别是:index.js、package.json、README.md(包的说明文档)
  • a.三个文件的代码
    代码演示如下:
//package.json文件
{
    "name": "itheima-tools-xiaochen",
    "version": "1.0.0",
    "main": "index.js",
    "description": "提供了一些格式化时间,HTMLEscape相关的功能",
    "keywords": ["itheima","dataFormat","escape"],
    "license": "ISC"
}
//index.js文件
//这是包的入口文件
//定义格式化时间的方法
function dataFomat(dtstr){
    const dt = new Date(dtstr)

    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 > 9 ? n : '0' + n
}

//定义转义 HTML 字符的函数
function htmlEscape(htmlstr){
    return htmlstr.replace(/<|>|"|&/g,(match) => {
       switch(match){
            case '<':
                return '&lt;'
            case '>':
                return '&gt;'
            case '"':
                return '&quot;'
            case '&':
                return '&amp;'
       }
    })
}

//定义还原 HTML 字符串的函数
function htmlunEscape(str){
    return str.replace(/&lt;|&gt;|&quot;|&amp;/g,(match) =>{
        switch(match){
            case '&lt;':
                return '<'
            case '&gt;':
                return '>'
            case '&quot;':
                return '"'
            case '&amp;':
                return "&"
        }
    })
}

//暴露方法
module.exports = {
    dataFomat,
    htmlEscape,
    htmlunEscape
}
//REANDM.md文件,见D:\StudyMyself\node.js\day2\code\ithema-tools\README.md
//测试index.js中方法的文件
const itheima = require('./ithema-tools/index')

const dt = itheima.dataFomat(new Date())

console.log(dt)

const htmlstr = '<h1 title="abc">这是h1标签<span>123&nbsp;</span></h1>'
const result = itheima.htmlEscape(htmlstr)
console.log(result)

const result1 = itheima.htmlunEscape(result)
console.log(result1)
  • b.将不同的功能进行模块化的拆分
    将index.js的代码分为了两个部分
    代码演示如下:
//dateFormat.js
//定义格式化时间的方法
//定义格式化时间的方法
function dataFormat(dtstr){
    const dt = new Date(dtstr)

    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 > 9 ? n : '0' + n
}

module.exports = {
    dataFormat
}
//文件名:htmlEscape.js
//定义转义 HTML 字符的函数
function htmlEscape(htmlstr){
    return htmlstr.replace(/<|>|"|&/g,(match) => {
       switch(match){
            case '<':
                return '&lt;'
            case '>':
                return '&gt;'
            case '"':
                return '&quot;'
            case '&':
                return '&amp;'
       }
    })
}

//定义还原 HTML 字符串的函数
function htmlunEscape(str){
    return str.replace(/&lt;|&gt;|&quot;|&amp;/g,(match) =>{
        switch(match){
            case '&lt;':
                return '<'
            case '&gt;':
                return '>'
            case '&quot;':
                return '"'
            case '&amp;':
                return "&"
        }
    })
}

module.exports = {
    htmlEscape,
    htmlunEscape
}
//文件名:index.js
//这是包的入口文件

const date = require('./src/dateFormat')
const escape = require('./src/htmlEscape')

//暴露方法
module.exports = {
    ...date,   // ... 是es6新特性,展开运算符
    ...escape
}
const
  • 8).发布包
    1.先将服务器换到https://registry.npmjs.org/这个服务器上(用 npx nrm ls)
    2.在终端注入 npm login ,输入自己的用户名、密码、邮箱。
    3.然后将终端切换到根目录下,如(PS D:\StudyMyself\node.js\day2\code\ithema-tools-xiaochen>)
    4.输入npm publish,就发布好了。
    5.运行 npm unpublish 包名 --force ,就能删除已经发布的包(72小时内发布)

2.Express

  • 1).使用express创建最基本的服务器
//1.导入 express 
const express = require('express')
//2.创建web服务器
const app = express()
//3.调用app.listen(端口号,回调函数),启动服务器
app.listen(8080,() => {
    console.log('express server running at http://127.0.0.1:8080')
})
  • 2).使用express监听get请求和post请求
//1.导入 express 
const express = require('express')

//2.创建web服务器
const app = express()

//4.监听客户端的 GET 和 POST 请求,并向客户端相应具体的内容
app.get('/user',(req,res)=>{
    //调用express提供的res.send() 方法,向客户端响应一个 JOSN 对象
    res.send({ name:"zs",age:20,gender:"男"})
})

app.post('/user',(req,res)=>{
    //调用express提供的res.send() 方法,向客户端响应一个 文本字符串
    res.send('请求成功')
})


//3.调用app.listen(端口号,回调函数),启动服务器
app.listen(8080,() => {
    console.log('express server running at http://127.0.0.1:8080')
})
  • 3).获取url中携带的查询参数(代码的app.get()请求,返回是req.query)
app.get('/',(req,res) =>{
    //通过 req.jqurey 可以获取客户端发送过来的 查询参数
    //注意:默认情况下,req.query 是一个空对象
    console.log(req.query)
    res.send(req.query)
})

  • 4).获取URL中的动态参数
//注意:这里的 :id 是一个动态参数   其中的 : 是固定的写法
app.get('/user/:id',(req,res) => {
    //req.params 是动态匹配到的 URL 参数,默认也是一个空对象
    console.log(req.params)
    res.send(req.params)
})
测试的接口:http://127.0.0.1:8080/user/1
测试的结果:
{
	"id": "1"
}
//两个参数
app.get('/user/:id/:name',(req,res) => {
    //req.params 是动态匹配到的 URL 参数,默认也是一个空对象
    console.log(req.params)
    res.send(req.params)
})
测试的接口:http://127.0.0.1:8080/user/1/zs
测试的结果:
{
	"id": "1",
	"name": "zs"
}
  • 5).托管静态资源(使用express.static()实现)
    多个静态资源的话,多次调用express.static()
//在这里调用express.static()方法,快速对外提供静态资源
app.use(express.static('clock'))
//网址输入:http://127.0.0.1/index.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值