Node.js 学习笔记6

cnpm

cnpm是淘宝构建的npmjs.com的完整镜像,也就是说,淘宝把npm对应的资源下载到国内服务器,使用cnpm指令时,访问国内服务器即可。

对于国内的网络来说,有时候npm指令会由于网络问题无法执行,因此可以使用国内镜像来避免这个问题。

网址:https://npmmirror.com/

安装cnpm:npm install -g cnpm --registry=https://registry.npmmirror.com

cnpm的指令和npm一样,只不过是把npm替换成cnpm

**通过npm指令访问淘宝的镜像地址:**除了使用cnpm可以到淘宝的服务器下载包以外,还可以使用npm指令来实现,在这种方式中,只需要修改npm对应指令的下载地址即可。

配置下载地址有两种方式:

1.通过配置指令直接配置:npm config set registry https://registry.npmmirror.com/

2.通过工具配置:

npm i -g nrm(下载工具nrm)

nrm use taobao(使用nrm配置npm命令对应的访问地址)

npm config list(这一步是查看配置项,如果registry是https://registry.npmmirror.com/,则说明配置成功)

需要注意,淘宝的镜像是无法上传包的,只能金下载。

yarn

yarn也是包管理工具之一。

yarn是facebook在2016年推出的新的javaScript包管理工具。

官网:https://yarnpkg.com/

yarn特点

yarn可以缓存下载过的包,当再次安装包时无需重复下载,同时利用并行下载最大化资源利用率,因此安装速度快

安全:在执行代码之前,yarn会通过算法校验每个安装包的完整性

可靠:yarn可以在不同系统上无差异的工作

安装:

npm i -g yarn

基础指令:

初始化 yarn init / yarn init -y

安装包 yarn add xxx(生产依赖) yarn add xxx -dev(开发依赖) yarn global add xxx(全局安装,但yarn的全局安装可能会失效,这是由于yarn全局安装路径不会默认配置到环境变量,这时需要自己查看对应的文件路径,然后把该路径添加到环境变量中)

删除包 yarn remove xxx(删除当前目录下的包)yarn global remove xxx(删除全局包)

安装项目依赖 npm

运行命令别名 yarn 别名(与npm不同的是,yarn不需要加run)

**yarn配置淘宝镜像:**yarn config set registry https://registry.npmmirror.com/

yarn config list(查看yarn配置项)

yarn的锁文件是yarn.lock,而npm的锁文件是package-lock.json,可以通过锁文件名判断当前项目的包管理工具是yarn还是npm。

npm发布包

除了下载别人写好的包,我们也可以自己写好一个功能包,然后上传,然后别人就可以下载并使用我们写好的包。

创建与发布:

1.创建文件夹,npm初始化工具包,在package.json中填写包的信息:

在包项目的文件夹下,敲npm init初始化包配置,在name里填写包名:

2.在文件夹下创建index.js(不一定非得是index.js,是要和package.json中的main保持一致),在index.js中声明函数,使用module.exports暴露方法

这里随便写了一个内容,因为是学习流程用的,就不写很复杂的了:

3.在https://www.npmjs.com/signup 注册账号

4.激活账号

5.确认本地npm对应的指令地址是npm官方地址(nrm use npm)

6.npm login填写用户信息

(3、4、5、6流程比较常规,这里就不写了)

7.npm publish提交包

然后publish就可以了:直接在终端命令行中npm publish即可,默认上传的就是当前文件夹下配置和写好的包。

包上传之后,通过npm i 包名,就可以下载刚才上传的包了。

更新包:

1.更新包在本地的代码

2.对更新后的代码进行测试

3.修改package.json中的版本号

4.更新 npm publish

删除包:

npm unpublish

npm unpublish --force(如果删除报错,可以使用--force强制删除)

对于删除操作,包的删除并不是可以自由进行的,而是需要满足一定的条件:1.你是包的作者 2.包发布时间小于24时可以删除 3.发布时间超过24小时时,需要满足没有其他包依赖、并且每周小于300下载量,且只有一个维护者时才可以删除

不同的包管理工具

之前学习过,包管理工具不是前端特有的,它是一个通识概念:

不同语言的包管理工具对照:

PHP:composer

Python:pip

Java:maven

Go:go mod

JavaScript:npm/yarn/cnpm/pnpm/...

Ruby:rubyGems

操作系统的包管理工具对照(操作系统的包管理工具管理的是软件包,也就是可以通过管理工具对软件进行下载、删除等):

Centos:yum

Ubuntu:apt

MacOS:homebrew

Windows:chocolatey

nvm

nvm(node version manager),是node版本管理工具。

在项目实际开发中,不同的项目可能需要不同的node版本才能启动,使用nvm管理当前node的版本,可以高效解决node版本的切换问题。

下载:https://github.com/coreybutler/nvm-windows/releases

进入网址,下载nvm-setup.exe

基础命令:

nvm list avaliable(查看所有的node版本号)

nvm list(查看当前电脑已经下载的node版本列表)

nvm install 版本号(下载对应版本的node)

nvm install latest(下载最新版本的node)

nvm uninstall 版本号(删除对应版本的node)

nvm use 版本号(把当前node版本切换成对应的版本)

express框架

虽然使用http服务也可以搭建服务器框架,给浏览器端返回响应结果,但是当编写复杂的逻辑时,http代码可能会比较繁琐。

express是一个基于node.js的极简、灵活的web应用开发框架。或者说,express是一个npm包,它封装了http搭建服务器的代码,可以帮助我们更有效率地进行服务器端开发。

官网:https://www.expressjs.com.cn/

下载

由于express是一个npm包,可以通过npm下载:npm i express

导入

const express = require('express')

基础使用

创建express对象:

const app = express()

创建路由:

app.get(URL地址,回调函数)

回调函数:(请求报文对象,响应报文对象)=>{ }

javascript 复制代码
const express = require('express')

const app = express()

app.get('/test',(req, res)=>{
    res.end('hello word')
})

设置服务器监听端口:

app.listen(监听端口,回调函数)

回调函数会在服务启动成功时自动调用(使用node xxx.js或者nodemon xxx.js启动服务时,会自动调用这个回调函数)

javascript 复制代码
const express = require('express')

const app = express()

app.get('/test',(req, res)=>{
    res.end('hello word')
})


app.listen(3000,()=>{
    console.log('server start!')
})

路由:

路由确定了应用程序如何影响客户端对特定端点的请求。

路由由请求方法、路径和回调函数组成。

app.<method>(path,callback)

满足路由的请求会触发对应的回调。

对于一个网址的根目录,比如www.baidu.com,虽然com后面没有接后续内容,但是对于服务器来说,该地址的路径是'/'。

<method> get post delete put all(all表示所有的请求都可以匹配)

path: * 表示匹配所有的路径,path也可以使用属性路由参数,比如/:id.html,表示匹配/xxx.html路径,其中xxx的部分会被保存在id属性里。

获取路由参数:

路由参数是指URL路径中的参数。

通过req.params获取。比如/:id.html,其中的id可以通过req.params.id获取。

**例子:**根据路由参数响应学生信息。

URL访问格式:

javascript 复制代码
/student/:studentId.html

学生信息参数:

javascript 复制代码
{
    "student":[
        {
            "id": "20260110",
            "name": "张三",
            "age": 20
        },
        {
            "id": "20260111",
            "name": "李雷",
            "age": 20
        },
        {
            "id": "20260112",
            "name": "韩梅梅",
            "age": 20
        }
    ]
}

服务器端代码:

此处单纯为了练习,就直接把json数据写在本地了:

写在本地然后引入index.js

index.js

javascript 复制代码
const express = require('express')

const app = express()

const student = require('./student.json')


app.get('/student/:studentId.html',(req, res)=>{
    let { studentId } = req.params

    let  studentInformation  = student.student

    //在student学生信息中寻找URL中ID对应的信息
    let result = studentInformation.find(item=>{
        if(item.id == studentId){
            return true
        }
    })

    if(!result){
        res.statusCode = 404
        res.end(`<h1>404 not found</h1>`)
    }

    res.end(`
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Document</title>
        </head>
        <body>
            <div>
                name:${result.name}
                age:${result.age}
            </div>
        </body>
        </html>
    `)
})


app.listen(3002,()=>{
    console.log('server start!')
})

效果:

获取请求报文参数

获取请求参数的方法存在于callback函数的req参数上。

获取报文的方式兼容原生HTTP模块的获取方式。与此同时,express还提供一些新的方法:

javascript 复制代码
const express = require('express')

const app = express()

app.get('/test',(req, res)=>{
    //兼容HTTP原生语法
    console.log(req.method)
    console.log(req.url)
    console.log(req.httpVersion)
    console.log(req.headers)

    //express提供的新方法
    console.log(req.path) //获取请求路径
    console.log(req.query) //获取查询query
    console.log(req.ip) //获取ip地址(获取发送请求终端的ip地址)
    console.log(req.get('host')) //获取指定的请求头(这里获取host请求头)

   // res.end('hello word')
})


app.listen(3002,()=>{
    console.log('server start!')
})

`

设置响应:

相关推荐
汽车通信软件大头兵17 小时前
Autosar--ETAS Isolar能够自由学习啦!
网络·学习·安全·汽车·etas·uds·isoalr
好奇龙猫17 小时前
【人工智能学习-AI-MIT公开课第 17.-学习:boosting 算法】
人工智能·学习·boosting
周而复始 否极泰来17 小时前
深入了解指针(1)
c语言·学习
winfredzhang17 小时前
[实战] Node.js + DeepSeek 打造智能档案归档系统:从混乱到有序的自动化之旅
css·node.js·js·deepseek api
De-Alf17 小时前
Megatron-LM学习笔记(8)DDP Model,Optimizer,Scheduler
笔记·学习
星火开发设计17 小时前
Python数元组完全指南:从基础到实战
开发语言·windows·python·学习·知识·tuple
亮子AI17 小时前
【Node.js】为什么数据库连接总是中断?
数据库·node.js
冻伤小鱼干17 小时前
《自动驾驶与机器人中的slam技术:从理论到实践》笔记——ch8(1)
笔记·机器人·自动驾驶
maray17 小时前
体验 Neon 产品
数据库·学习