Node.js的入门学习
以下内容总结自互联网,主要来源如下
- nodejs官网:https://nodejs.org/en/
- 菜鸟:https://www.runoob.com/nodejs/nodejs-http-server.html
- 慕课网上的免费课程—— Nodejs全栈入门课程
目录
文章目录
❤️第一次安装与配置
Node.js的安装有三种方式有三种
- 下载官网安装包进行安装
- 在mac os中 还可以 通过 Homebrew安装
- 使用nvm版本管理器安装
我们第一次安装,先下载官网安装包进行安装。(以windows机为例)
1.官网下载安装Node.js
Node.js官网:https://nodejs.org/
官网下载页:https://nodejs.org/en/download/
具体安装步骤省略了,注意一点:
我们把nodejs安装到自定义的D:\nodejs中(推荐放在自定义的路径中,因为之后需要再做一些配置),以下配置以nodejs安装到D:\nodejs中为例,需要用到nodejs路径的地方,请注意改成自己的。
接下来,我们可以查看一下node与npm版本,来检测是否安装成功
npm是nodejs的包管理器,它会随nodejs的安装而自动安装。在下面会具体介绍
node -v
npm -v
2.修改npm下载模块的全局安装位置
npm下载模块的全局安装位置,默认在C:\Users\Administrator\AppData\Romaing的两个文件夹中:一个叫npm一个叫npm-cache。
我们在D:\nodejs中新建npm_global,和npm_cache,并通过以下命令重设路径
npm config set prefix "D:\nodejs\npm_global"
npm config set cache "D:\nodejs\npm_cache"
为什么要这么设呢?
可以这样理解,不论是nodejs还是npm 安装的模块,我们都可以把他们看作是项目。只不过Node.js作为运行环境是一个可以运行其它项目的项目。那么现在我们都不提倡造重复的轮子,项目本身如果需要依赖其他模块,那么这些依赖的模块就安装在该项目的node_modules下面,其中有的作为项目的生产环境,有的作为项目的开发环境。
而nodejs呢,作为一个运行环境,它的node_modules下面,只要关于node的核心modules就够了,它也不依赖其他模块。
那么我想用一些可以平时使用的模块,来做基于nodejs的开发行吗?那也行,我们就有了上面两个文件夹,一个npm
一个npm-cache
,实际上就是分别安装全局模块的缓存以及最终安装位置的两个文件夹。
- 比如说hexo模块,我们可以开发个人博客~等下面配置完成,可以用[HEXO框架建站学习!!](…/04 建站/Hexo框架建站学习.md)
由于我们一般这些全局模块就是基于nodejs使用的,我们直接放到nodejs下面改名为
npm_global
和npm_cache
。可以理解为npm安装的全局第三方模块,供基于nodejs的开发使用,这样找起来也更方便一些。
3.配置系统变量与环境变量
用户变量中找到Path修改默认值
用户变量的Path中将默认的C:\Users\用户名\AppData\Roaming\npm
为D:\nodejs\npm_global
![image-20210225165307845](https://i-blog.csdnimg.cn/blog_migrate/5cbde55b0e8318a102be398a5b88834f.png)
系统变量添加NODE_PATH
系统变量中添加NODE_PATH
为D:\nodejs\npm_global\node_modules
D:\nodejs\npm_global
中用来存放这些全局模块的一些cmd文件,其指令就可以在其它位置调用了
D:\nodejs\npm_global\node_modules
则存放具体的这些全局模块
4.配置npm的源服务器网站
npm源服务器:资源的下载和上传会发送到这里。同一源服务器下的包名不可重复。
默认使用的是npm官方的源服务器,我们可以通过源服务器下载或上传资源,但是会出现下载速度慢的问题,我们可以通过以下命令改成国内淘宝的源,并检测是否生效
npm config set registry=http://registry.npm.taobao.org
npm config get registry
其实到这里已经结束了,我们可以确认一下
- 在cmd中用
npm config list
显示一下配置,确认是否都修改成功了
- 也可以在C盘个人用户目录下,打开.npmrc文件(来确认)。
那么到这里,我们第一次安装配置就彻底完成了~
接下来进行正式的入门学习,并使用几个好用的工具!
❤️nodejs入门
1. 使用包管理工具——NPM
介绍一下NPM:NPM是Node.js的包管理工具(package manager),
它的作用主要有以下两点。
允许用户从NPM服务器下载他人编写的第三方包或安装他人的命令行程序到本地
允许用户将自己编写的包或命令行程序上传到NPM服务器供他人使用
也就是说NPM提供了许多指令,以支持我们下载或上传自己的项目/模块到服务器上。
逛github的同学,也能发现,在github上的一些开源项目,它们安装的方法就包括:用npm的方式下载到本地。
在这里,我先给出三个主要功能的指令,先看一遍有个数就可以了。
初始化项目
在空的项目目录下,打开cmd,输入指令,可以生成包管理文件package.json(其中是该项目的一些配置信息)
以下给出指令的两种方式
npm init
npm init -y
-y:表示按默认初始化(不然需要手动输入具体的信息)
安装第三方项目/模块
在项目目录下,打开cmd,输入指令,安装模块到合适位置
以下给出相关指令的四种方式
npm install
npm instal <module>
npm instal <module> -g
npm instal <module> -s
npm instal <module> -d
npm install
:安装当前项目的环境
npm install <module> -g
:安装到全局,在nodejs全局目录(也就是上面配置的npm_global中)
npm install <module>
:项目下安装,不写入package.json。
npm install <module> -s
:项目下安装,写入到package.json的生产/应用环境dependence
npm install <module> -d
:项目下安装,写入到package.json的开发环境devdependence
在项目下安装,会安装在./node_module/下,若无,则新建node_module。
发布项目/模块
将自己的项目发布到服务器上需要登陆一个用户再发布。
npm adduser 添加/注册账户
npm login 登录账户
npm publish 发布当前项目
其它命令
npm uninstall <module> -g
npm unistall <module>
npm cache clean -f 清理缓存
npm list 查看所有安装信息
npm list -g 查看所有全局安装信息
npm list <module> 查看module模块信息
别慌,不会用没关系,接下来我们会手把手,实操两个小demo,来熟悉它们。
2. 手把手体验两个Node.js程序demo~
demo1.调用系统API显示一些信息
-
先新建一个合适的文件夹,作为项目的根目录
-
在当前目录打开cmd,输入
npm init -y
初始化后会在目录下自动生成package-lock.json文件
-
新建一个demo.js,用合适的编辑器打开
并输入以下代码const os = require('os')//os是用来操作系统的api //获取os的cpu const cpus = os.cpus(); console.log(cpus.length) //获取os的内存(单位bytes) const total = os.totalmem(); console.log(total/1024/1024/1024);//处理成GB const free = os.freemem(); console.log(free/1024/1024/1024); console.log(os.networkInterfaces())//获取网络状况
-
在cmd中打开当前目录,
node demo.js
即可运行
demo2.使用http模块实现简单的web sever
-
可以把上面的内容注释掉,输入
const http = require('http') const hostname = '127.0.0.1' const port = 3000 //创建server实例 const server = http.createServer((req, res) => {//回调函数传入两个参数request,response res.statusCode = 200 res.setHeader("Content-Type", 'text/plain') res.end('hellow') }) server.listen(port, hostname, () => { console.log('服务开启成功'); })
-
再运行,
node demo.js
-
在浏览器来访问,localhost:3000
那么到这里,我们成功使用了nodejs调用系统api,以及创建简单的web服务器的功能!
3. 三个高效工具
nodemon热启动
在我们启动服务器之后,对文件的修改操作总是需要关闭再重新启动服务器,再去看浏览器。
那有没有什么办法可以简化呢?可以使用一个工具nodemon来实现热启动的效果,帮助我们检测文件的变化,然后将服务自动重启。
我们先了解一下怎么修改启动指令
☁️修改启动指令
我们一般启动项目,并不是用
node xx.js
启动的,而是npm dev
或者npm start
,这其实需要配置一下脚本
-
假如,当前项目里有一个src/app.js文件,我们要启动它
-
打开根目录里的package.json,在scripts中加入
"start":"node src/app.js"
-
那么我们在cmd中启动app.js可以使用
npm start
来启动了~
☁️安装配置(详细流程)
-
配置nodemon
-
npm install nodemon -D
:安装在dev环境 -
修改启动命令
"start": "nodemon src/app.js",
这样我们就可以用nodemon启动了
可以把之前的指令改为"start:node"
来实现 用 node启动的方式,避免重名哈。
-
重启服务器,之后再对文件修改,服务器就会自动重启
-
我们发现,现在修改任何文件,系统都要重启,那么能不能设置nodemon监测的文件呢?当然是肯定的。
-
设置具体监听内容
-
在项目根目录里新建nodemon.json
-
输入以下代码,表示监听src下的任何子集文件夹的任何js文件
{ "watch":["./src/**/*.js"] }
-
我们再重启一下使配置文件生效:
npm start
-
☀️基本使用
- 为项目配置源服务器
- npm install nodmeon -D
- 修改启动方式
- 通过增加nodemon.json 配置 watch的文件
- npm start
nrm控制源服务器
nrm可以让配置源仓库更加便捷
☁️安装配置
- 打开cmd
- 全局安装nrm:
npm install nrm -g
☀️基本使用
-
使用某源服务器:
- 安装完后,
nrm ls
nrm use <registry>
- 安装完后,
-
常用命令
-
查看所有命令:
nrm -h
-
查看当前可选的源:
nrm ls
(*为当前使用的源) -
查看当前使用的源:
nrm current
-
使用/切换某个源:
nrm use <registry>
,如nrm use taobao
-
添加自定义私有源:
add <registry> <url> [home]
-
删除某个源:
nrm delete <registry>
-
nvm管理Node.js版本
不同项目用的nodejs版本不同,当需要更改底层库的情况下,那么无法兼容,因此可以使用nvm管理不同项目的nodejs版本
☁️安装配置
- 下载nvm-windows
- 找到nodejs的安装路径
可以在cmd中输入:where node
,即可显示 - 安装时输入两个地址
输入nvm安装目录
输入nodejs快捷方式的目录 - cmd中查看当前版本:
nvm -v
☀️基本使用
-
命令帮助:
nvm -h
-
安装某个版本
-
查看开放的远程nodejs版本:
nvm ls available
-
安装某版本
最新版本:nvm install
指定版本:nvm install <version>
-
使用某版本
- 查看已安装版本:
nvm ls
- 当前命令行下使用某个版本:
nvm use<version>
- 设置default版本:
nvm alias default <version>
,之后重新打开命令行
- 查看已安装版本:
-
❤️配置总结
基于上面npm的入门学习,我们可以再加上git仓库的配置,那么总流程大致如下(可以指令优先)
-
npm init -y
-
配置git仓库
git init
- 新建,gitignore,加上
node_modules
,表示忽略
-
配置nodmeon
npm install nodemon -D
- 修改启动方式
- 通过增加nodemon.json 配置 watch的文件
-
新建一个src/app.js
web应用基础!使用express!
-
npm init -y
-
配置git仓库
git init
- 新建,gitignore,加上
node_modules
,表示忽略
-
导入express框架,
npm install express -s
-
配置nodmeon
npm install nodemon -D
- 修改启动方式,如
"start": "nodemon ./src/app.js",
- 通过增加nodemon.json 配置 watch的文件
-
新建一个src/app.js(如下为demo)
const express = require('express'); const app = express(); app.use((req,res)=>{ res.json({ name:"张三" }) }) app.listen(3000,()=>{ console.log("启动成功") });
-
npm start
,访问网页127.0.0.1:3000
推荐使用postman工具去调试服务接口哦!
web 服务如何处理一个请求?
url -->网络–>dns解析–>目标服务器
- 如何响应这个请求–>路由//规则
- 请求方式来区分,restful
- get
- post
- delete
- put
- 通过uri–>路径
如:www.baidu.com/a/c/a.html
- 请求方式来区分,restful
const express = require('express');
const app = express();
// demo1
// app.use((req,res)=>{
// res.json({
// name:"张三"
// })
// })
// demo2
// 针对 get的获取请求
app.get('/name', (req, res) => {
res.send('tom')
})
// 针对post的提交请求
app.post('/name', (req, res) => {
res.send('tom post')
})
//demo3
// 针对get 传入参数并获取的请求
app.get('/name/:age', (req, res) => {
let {age} = req.params;
res.json({
name:'tom',
age
})
})
app.listen(3000, () => {
console.log("启动成功")
})
//纯nodejs
// const http = require('http');
// const server = http.createServer((req,res)=>{
// })
如何定义一个api/路由让客户端随意访问也能得到返回
1.客户端无论使用什么请求方式,服务都可以相应
1.app.all
app.all(’/demo’,(req,res)=>{})
2.客户端无论使用什么uri,服务都可以相应(可以用于记录日志)
1.app.all(’*’,(req,res)=>{})
extra:使用app.use——>使用中间件(一般不推荐,因为use就是用来搞中间件的,路由只是中间件的一种)
const app = express()是什么?什么是路由拆分
app——>application——>web 服务的实例
什么是路由拆分?就是把不同的功能,拆分到不同的路由里去!
比如拆分三个模块的路由:
- member
- sku
- order
1.通过express.router来实现路由拆分
2.记得暴露module.exports = router;
详情请见源码
什么是express中间件?
中间件是什么?
形象点就是家里的插线板,可以接很多插头。这个插线板可以插也可以不插。
中间件的完整结构
- 它是一个函数
- 包括err,req,res,next参数,——>function
function middleware_demo(er,req,res,next){
//中间件处理
}
中间件类型
- app 级别的使用
- 注册的时候,一定是在最顶级
- app.use——>api加载进来
- router 级别
- 异常处理——>应用级别的异常某种程度上也属于app级别
- 内置的中间件
异常处理
异常捕获
Express内置异常处理
自定义异常处理
Mysql的安装与使用
mysql——>结构化数据库中的一种
mysql——>服务,提供了数据存放的服务
——>数据库:划分的存储区域
——>table:
——>类似对象数组(如js的json)
[
{
id:1,
name:'计算机编程'
},
{
id:2,
name:"hello friend"
}
]
装mysql就不讲啦
- 登录:
mysql -u root -p
- 查看数据库:
show databases;
Sequelize介绍和使用
sequelize是orm中的一种
什么是ORM(对象关系映射)
Sequelize作用
在nodejs应用中集成sequelize
npm install sequelize -s
npm install sequelize-cli -s
npx sequelize-cli init
❤️快速配置总结
四件套
npm init -y
git init
,新建,gitignore,加上node_modules
,表示忽略npm install nodemon -D
,修改启动方式,(通过增加nodemon.json 配置 watch的文件)npm install express -s
- 新建一个src/app.js