当前位置:网站首页 > Node.js开发 > 正文

安装nodemon(安装node和npm过程)



浏览器中有js解析引擎 chrome:v8 性能最好 safri:JSCore 。。。

每个游览器内置了DOM、BOM这样的API函数。浏览器中的js可以调用他们。

浏览器的引擎、内置API

可以,需要借助nodejs

Node.js是一个基于v8引擎的js

  • 浏览器是js的前端运行环境
  • nodejs是js的后端运行环境
  • nodejs无法调用DOM和BOM等浏览器内部的API

js基础语法+node内置api模块(fs、path、http)+第三方api模块(express、mysql等)

  1. LTS:稳定版
  2. current:开发版本,存在bug
  1. 打开终端
  2. 输入

fs模块是node官方提供的、用来操作文件的模块。

 
  
 
  
 
  

通过err对象是否为null

 
  
 
  
 
  

读取文件 小红=99 小白=100 小黄=70 小黑=66 小绿=88 写入新文件内容 小红,99 小白,100 小黄,70 小黑,66 小绿,88

 
  

出现路径拼接问题,是因为提供了 https://article.juejin.cn/post/ 或者 https://article.juejin.cn/ 开头的相对路径 解决方法: 移植性差。不利于维护。 __dirname:当前文件所处目录 image.png

path模块是node官方提供的、用来处理路径的模块。它提供了一系列的方法和属性。

  1. path.join() 用来将多个路径片段拼接成一个完整的路径字符串
  2. path.basename() 从路径字符串中,将文件名解析出来
  3. path.extname() 获取文件的扩展名
 
  
 
  

注意: https://article.juejin.cn/ 会抵消前面的一层路径

 
  
 
  

用来创建web服务器的模块 http.createServer()

域名服务器(DNS)将域名转化为IP地址。

  1. 导入http模块
    1. const http = require('http')
  2. 创建web服务器实例
    1. const server = http.createServer()
  3. 为服务器实例绑定request事件,监听客户端请求
 
  

  1. req
    1. req是请求对象,它包含了与客户端相关的数据和属性
    2. req.url 是客户端请求的url地址
    3. req.method是客户端的method请求类型
  2. res
    1. res是响应对象
    2. res.end(),向客户端发送指定内容
    3. res.setHeader('Content-Type',"text/html; charset=utf-8") 防止响应内容
  3. 启动服务器
 
  

案例:

 
  
 
  
  1. 提高了代码的复用性
  2. 提高了代码的可维护性
  3. 实现了按需加载

例如:

  • 使用什么样的语法格式来引用模块
  • 在模块中使用什么样的语法格式向外暴露成员
  1. 内置模块
    1. 由nodejs官方提供的,例如fs、path、http
  2. 自定义模块
    1. 用户自己创建的js文件,都是自定义模块
  3. 第三方模块
    1. 由第三方开发出来的模块,使用前需要先下载

使用方法

 
  

使用require() 方法加载其他模块时,会执行被加载模块中的代码

在自定义模块中定义的变量、方法等成员,,无法被外界访问。

在自定义模块中,可以使用module.exports对象,将模块内的成员共享出去,供外界使用。 案例: 定义自定义模块

 
  

加载自定义模块

 
  

永远以module.exports指向的对象为准 例如: 定义自定义模块

 
  

加载自定义模块

 
  

默认情况下,exports和module.exports指向

 
  

注意: 这里只是把exports的指针指向了module.exports,如果更改了exports的指向,那么二者就不再是一个对象,此时require模块得到的是module.exports所指向的对象 例如:

 
  

包是基于内置模块封装出来的,提供了更高级、更方便的API,极大的提高了开发效率

Node Package Manager(),这个包管理工具随着Node.js的安装包一起安装用户的电脑上。

通过

 
  

例如:2.24.0

  1. 第一位数字:大版本
  2. 第二位数字:功能版本
  3. 第三位数字:bug修复版本

在项目根目录中,必须提供一个叫做的包管理配置文件。 作用:用来记录项目中安装了哪些包,从而方便剔除node_modules目录之后,在团队成员之间共享项目的源代码。

 
  

运行npm install命令,会自动把包的名称和版本号,记录到package.json文件中。

专门记录安装了哪些包,开发和项目上线之后都会用到

如果某些包,在项目上线后不会用到,那么这些包就记录到devDependencies中。

 
  

npm install

npm uninstall

 
  

卸载的包,会自动从package.json中的dependencies中移除掉。

默认从国外的registry.npmjs.org/服务器进行下载,会很慢 解决方式:

 
  

为了更方便的切换下包镜像源,可以安装nrm这个工具

 
  

npm install 如果提供了参数,则会把包安装为全局包。 注意:

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

  1. 必须以单独的目录而存在
  2. 包的顶级目录下必须包含package.json这个包管理配置文件
  3. package.json中必须包含name、version、main这三个属性,分别代表包的名字、版本号、包的入口

初始化包的基本结构

  1. 新建 my 文件夹,作为包的根目录
  2. 在 my 文件夹中,新建如下三个文件:
    1. package.json
    2. index.js
    3. README.md
 
  

编写完,使用module.exports把对应的方法共享出去。

README.md,包的使用说明文档。

  1. 注册npm账号
    1. www.npmjs.com/
  2. 登录npm账号
    1. 在终端里面输入
    2. 输入 账号密码邮箱后,即可登录成功。
    3. 注意:执行命令之前,必须先把包源切换为npm官方服务器
  3. 发布
    1. 切换到包的根目录
    2. 终端里输入
    3. 注意:包名不能重复
 
  
  1. 只能删除72个小时内发布的包
  2. 删除的包在24小时内不允许重复发布

模块在第一次加载后会被缓存。提高了模块的加载效率

加载优先级最高

必须指定以 或 开头的路径标识符 如果省略了文件的扩展名,则node.js会按顺序分别尝试加载以下的文件:

  1. 按照确切的文件名加载
  2. 补全.js扩展名进行加载
  3. 补全.json扩展名进行加载
  4. 补全.node扩展名进行加载
  5. 加载失败 终端报错

假设在 文件调用了,则Node.js会按照以下顺序查找:

  1. C: iankproject ode_modules ools
  2. C: iank ode_modules ools
  3. C: ode_modules ools

找不到就移动到再上一层父目录中,进行加载,直到文件系统的根目录。

专门来创建web服务器的 本质就是一个第三方包,提供了创建服务器的快速方法。和http模块类似。 express是基于http模块疯转出来的。

  1. 前端程序员:
    1. 方便、快速的创建web网站的服务器或者api接口的服务器

在根目录中,运行终端命令

 
  
 
  
 
  
 
  

res.send()方法

 
  

req.query

 
  

req.params

 
  

注意:

  1. 不是固定写法,例如也是可以的,最后req.params返回的为
  2. url也可以是这种格式,也就是说可以有多个层级,返回的数据类型为

express.static()函数,通过它,可以方便的创建一个静态资源服务器。可以将图片、css文件、JS文件对外开放。 代码示例:

 
  

游览器窗口输入即可访问目录下的index.html文件。css、图片文件同理。

 
  
 
  

现在你如果想访问anli下的index.html,那么需要输入的地址为:

能够监听项目文件的变动,当代码被修改后,nodemon会自动帮我们重启项目。

 
  

启动项目

 
  
  1. 按照定义的先后顺序
  2. 请求类型和请求url同时匹配成功,才会调用对应的处理函数
 
  

很少会把路由挂载在app上

推荐将路由抽离为单独的模块

  1. 创建路由模块对应的模块
  2. 调用函数创建路由对象
  3. 向路由对象上挂载具体的路由
  4. 使用向外共享路由对象
  5. 使用函数注册路由模快

代码示例:

 
  
 
  

注意: 函数的作用,就是来注册全局中间件。

为路由模块添加前缀

 
  

有输入有输出

本质上就是一个function处理函数 注意:中间件函数的形参列表中,必须包含。而路由处理函数中只包含req和res

next函数是,它表示把流转关系给下一个中间件或路由 image.png

最简单的中间件函数

 
  

客户端发起的任何请求,到达服务器之后,都会触发的中间件,叫做全局中间件。 通过app.use(中间件函数),即可定义一个全局生效的中间件。

 
  
 
  

多个中间件之间,

 
  

可以使用app.use()连续定义多个全局中间件。中间件会按照定义的顺序来执行。

不使用app.use()定义的中间件,就是局部生效的中间件,代码示例:

 
  

可以在路由中,通过如下两种的等价的方式,使用多个局部中间件:

 
  

示例:

 
  
  1. 一定要在路由之前注册中间件
  2. 不要忘记next函数
  3. 可以使用多个中间件进行处理请求
  4. next之后不要写其他的代码
  5. 多个中间件之间共享req,res
  1. 应用级别的中间件
  2. 路由级别的中间件
  3. 错误级别的中间件
  4. express内置的中间件
  5. 第三方的中间件

应用级别的中间件

通过app.use()或者app.get()或者app.post(),,叫做应用级别的中间件。

路由级别的中间件

绑定到express.Router()实例上的中间件,叫做路由级别的中间件。 它的用法和应用级别的中间件没有任何区别。 代码示例:

 
  

错误级别的中间件

专门捕捉整个项目中发生的异常错误。 格式:必须有,形参顺序从前到后,分别是(,req,res,next)

 
  

Express内置的中间件

从express4.16.0版本开始,express内置了个常用的中间件。

  1. express.static
    1. 快速托管静态资源的内置中间件
    2. html。文件。图片。css样式
  2. express.json
    1. 解析json格式的请求数据。
  3. express.urlencoded
    1. 解析URL-encoded格式的请求数据
 
  
express.json
 
  
express.urlencoded
 
  
  1. 运行
  2. 使用
  3. 在路由之前调用

跨域资源共享,游览器的默认会阻止跨域获取资源。 但是如果接口服务器,就可以解除。

Access-Control-Allow-Origin

例如:只允许来自 itcast.cn 的请求

 
  

表示运行任何域的请求

Access-Control-Allow-Headers

默认情况下,cors仅支持客户端向服务器发送的9个请求头 image.png 如果客户端向服务器发送了额外的请求头信息,需要在服务器端,通过对,否则这次请求会失败。

 
  

Access-Control-Allow-Methods

默认情况下,coes仅支持客户端发起的GET、POST、HEAD请求 如果客户端希望通过请求服务器,则需要在服务器端,通过Access-Control-Allow-Methods来指明实际请求所允许使用的HTTP方法。

 
  

简单请求

  1. 请求方式:GET、POST、HEAD三者之一
  2. HTTP头部信息不超过一下字段

image.png

预检请求

  1. 请求方式:GET、POST、HEAD之外的请求类型
  2. 请求头中包含自定义头部字段
  3. 向服务器发送了application/json格式的数据

正式通信之前,浏览器发送OPTION请求进行预检,来获取服务器是否允许该实际请求。

区别

预检请求会发送两次请求。

:浏览器通过。 特点:

  1. JSONP不属于真正的ajax请求,因为他没有使用XMLHttpRequest这个对象
  2. 仅支持get请求

注意事项

如果项目中已经配置了cors,为了防止冲突,必须在配置cors中间件之前声明JSONP的接口。否则JSONP接口会被处理为开启了CORS的接口。

 
  

实现jsonp接口

  1. 获取客户端发送过来的回调函数的名字
  2. 得到要通过JSONP形式发送给客户端的数据
  3. 根据前两部得到的数据,拼接出一个函数调用的字符串
  4. 把上一步拼接得到的字符串,相应给客户端的标签进行解析
  1. 关系型数据库
  2. 非关系型数据库
  1. 查询一个表中所有的数据

SELECT * FROM 表名称

  1. 查询一个表中的一列

SELECT 列名称 FROM 表名称

 
  

语法格式:

 
  
 
  

语法格式:

 
  
 
  

语法格式

 
  
 
  

image.png 例句:

 
  

and和or可在where子句中把多个条件结合起来。

 
  

对结果集进行排序,升序。降序可以使用关键字。

 
  

返回查询结果的总数居条数

 
  
  1. 安装操作mysql数据库的第三方模块(mysql)
  2. 通过mysql模块连接到mysql数据库
  3. 通过mysql模块执行sql语句
 
  
 
  
 
  

返回结果:

[ RowDataPacket { '1': 1 } ]

 
  
 
  
 
  
 
  
 
  
 
  

客户端的每次http请求都是独立的。。

Cookie是存储在用户游览器中的一段不超过4kb的字符串。 它由一个名称、一个值和其他几个用于控制Cookie、、的可选属性组成。 不同域名下的Cookie各自独立。每当客户端发起请求时,会自动把所有一同发送到服务器。

  1. 自动发送
  2. 域名独立
  3. 过期时限
  4. 4kb限制

客户端第一次请求服务器的时候,服务器会通过响应头,发送Cookie到游览器,游览器拿到Cookie,保存到游览器中,下一次请求的时候 ,将该Cookie放到请求头中,发送给服务器。服务器根据请求头中的Cookie验明用户的身份。

很容易被伪造。 如果把所有信息都存到cookie里面,那么敏感信息也就是存储到了客户端上,不安全。

游览器第一次请求服务器,,同时生成对应的Cookie字符串,将Cookie返回给客户端,客户端保存Cookie,下一次发送请求的时候将Cookie放到请求头中,发送给服务器,,认证成功后,将请求数据发送给客户端。

  1. 安装express-session中间件
  2. 配置express-session中间件
 
  

res.session

req.session

req.session.destory()

当前后端是跨域的时候,我们一般使用JWT认证。 JWT(JSON WEB Token)

客户端登陆,发送给服务器请求。服务器验证账号和密码,,生成后,将token发送给客户端。客户端将Token存储到LocalStorage中。客户端再次请求时,通过请求头的Authorization字段,将token发送给服务器。服务器把token字符串还原成用户的信息对象,身份认证成功后,相应给客户端对应的内容。

  1. Header头部
  2. Payload
    1. 真正的用户信息,用户信息加密后字符串
  3. Signature

三者之间用分隔。

导入jwt相关的包

  1. jsonwebtoken
    1. 生成JWT字符串的包
  2. express-jwt
    1. 将JWT字符串解析成JSON对象的包

定义secret密钥

用来加密和解密。

 
  

生成jwt字符串

调用jsonwebtoken包提供的sign()方法

 
  

将jwt字符串还原为json对象

 
  

使用req.user获取用户信息

当express-jwt这个中间件配置成功之后,就可以在那些有权限的接口中,使用req.user对象,来访问JWT字符串中解析出来的用户信息

 
  

全局错误处理中间件,捕捉JWT失败后产生的错误

到此这篇安装nodemon(安装node和npm过程)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就! 
  

                            

版权声明


相关文章:

  • node包管理工具(node包管理工具有哪些)2026-04-12 14:18:04
  • node npm版本(npm的版本)2026-04-12 14:18:04
  • nvm安装node(nvm安装node后要配置环境变量吗)2026-04-12 14:18:04
  • npm 升级nodejs(npm 升级包内依赖)2026-04-12 14:18:04
  • node版本管理工具n(node版本管理工具 n怎么用)2026-04-12 14:18:04
  • nvm安装node命令(nvm安装及全局配置node)2026-04-12 14:18:04
  • nvm下载node版本(nvm下载node版本失败)2026-04-12 14:18:04
  • node版本切换(node版本切换导致cnpm 下载不了)2026-04-12 14:18:04
  • nvm切换node版本(nvm切换node版本失败)2026-04-12 14:18:04
  • node怎么安装npm(如何安装nodemon)2026-04-12 14:18:04
  • 全屏图片