NodeJS和Express框架

2024-06-22 17:38
文章标签 框架 nodejs express

本文主要是介绍NodeJS和Express框架,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1 引包
      • 1.1 小案例
    • 2 express中的静态引用详解
      • 2.1 静态资源和动态资源
        • 2.1.1 app.use
        • 2.1.2 express.static
        • 2.1.3 express静态引用总结
    • 3 NodeJS中的热部署
    • 4 模板引擎渲染
      • 4.1 先安装相关的包
      • 4.2 配置 art-template 模板引擎
      • 4.3 使用模板引擎
    • 5 post提交
      • 5.1 安装post中间件
      • 5.2 使用post
        • 5.2.1 extended:true/false 区别
    • 6 express中间件
      • 6.1 基本理解
      • 6.2 错误处理

1 引包

在要执行文件的目录里,先生成包文件npm init
在相应的主文件目录里通过npm install express --save把express下载下来

1.1 小案例

var express = require("express")
var app=express();
app.get("/",function(req,res){console.log(req.url)res.end(`<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8" /><title>Document</title></head><body><img src="../img/test.jpg"/><h1>hello Express!你好</h1></body></html>`);
})
app.listen(3000,function(){console.log("3000 port server is running ......")
});

2 express中的静态引用详解

var express = require("express")
var app=express();

2.1 静态资源和动态资源

  • 静态资源文件通俗的可以理解成对于不同的用户来说,内容都不会变化的文件。比如不管是任何人访问百度,他们所接收到的看到的图片、css文件和前端javascript文件都是一样的,我们称这类文件为静态资源文件。

  • 那么响应的,对于不同用户做出不同反应的就是动态文件了,张三李四王五登录百度,百度会分别对他们显示"你好张三"、“你好李四”、“你好王五”,那么负责这么动态逻辑的文件就是动态文件了,根据你是用的技术不同,动态文件可能是.jsp文件、php文件或者我们node.js的服务器端js文件。

2.1.1 app.use

app.use 是浏览器里面请求地址URL中的一部分:即http:localhost:8000/ 里面的/默认URL是'/' ,也就是处理任何请求,同时要注意的是他会处理path下的子路径,比如如果设置path为’/hello’,那么当请求路径为’/hello/’,’/hello/nihao’,’/hello/bye’这样的请求都会交给app.use处理的

2.1.2 express.static

expres.static是文件地址,为了提供对静态资源文件(图片、csss文件、javascript文件)的服务,请使用Express内置的中间函数 express.static 。Express 会在静态资源目录下查找文件,所以 不需要把静态目录作为URL的一部分

app.use('/img/',express.static(__dirname+'/img'))//绝对路径写法
app.use('/img/', express.static('./img/'))//相对对路径写法
app.use('/img/', express.static('img'))//相对对路径另一种写法
2.1.3 express静态引用总结

app.use('/public/',express.static('./public/')) use 里面是请求的URL路径,static是本地文件路径
简单的来说就是用use函数里面的请求url 路径来替换static里面的路径了
例如app.use('/a/b/c',express.static('./public/')) 就是说要请求public下面的test.img时,url路径里面不能有public
应该是http:localhost:8000/a/b/c/test.img
app.use(express.static('./public/')) 要请求public下面的test.img时,url路径里面仍然是不能有public
应该是http:localhost:8000/test.img

3 NodeJS中的热部署

npm install --global nodemon

启动时是nodemon app.js 这样每次修改就不要重新启动

4 模板引擎渲染

4.1 先安装相关的包

npm install --save art-template
npm install --save express-art-template

4.2 配置 art-template 模板引擎

app.engine('html', require('express-art-template'))
  • 第一个参数,表示,当渲染以.html结尾的文件的时候,使用 art-template 模板引擎
  • express-art-template 是专门用来在 Express 中把 art-template 整合到 Express 中
  • 虽然外面这里不需要记载 art-template,但是也必须安装原因就在于 express-art-template 依赖了 art-template

4.3 使用模板引擎

  • 使用方法res.render('html模板名', {模板数据})
  • Express 为 Response 相应对象提供了一个方法:render
  • render 方法默认是不可以使用,但是如果配置了模板引擎就可以使用了
  • 注意:第一个参数不能写路径,默认会去项目中的 views 目录查找该模板文件
  • 也就是说 Express 有一个约定:开发人员把所有的视图文件都放到 views 目录中
  • 如果想要修改默认的 views 目录
  • 则可以 app.set('views', render函数的默认路径) 第一个参数必须是views,不能修改
  • 还是使用模板引擎的八字胡语法

5 post提交

5.1 安装post中间件

req.query 只能拿 get 请求参数,配置 body-parser 中间件(插件,专门用来解析表单 POST 请求体)

npm install --save body-parser

5.2 使用post

  • 添加body-parser后,请求参数里req会多一个字段属性body
  • body返回值是一个对象,里面是键值对储存的参数
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
  • urlencoded 方法主要解析类似于网址后缀的参数形式 post的默认格式,使用js中URLencode转码方法。包括将name、value中的空格替换为加号;将非ascii字符做百分号编码;将input的name、value用=连接,不同的input之间用&连接,即:key=value&key=value
  • json主要用来解析json样式
5.2.1 extended:true/false 区别
  • urlencoded 方法返回的对象是一个键值对,当 extendedfalse 的时候,键值对中的值就为StringArray形式,为true的时候,则可为任何数据类型。
  • false:表示使用系统模块querystring来处理,也是官方推荐的
  • true:表示使用第三方模块qs来处理

6 express中间件

6.1 基本理解

中间件:处理请求的,本质就是个函数,在 Express 中,对中间件有几种分类

  • 当请求进来,会从第一个中间件开始进行匹配
    - 如果匹配,则进来
    - 如果请求进入中间件之后,没有调用 next 则代码会停在当前中间件
    - 如果调用了 next 则继续向后找到第一个匹配的中间件
    - 如果不匹配,则继续判断匹配下一个中间件
  • 不关心请求路径和请求方法的中间件,也就是说任何请求都会进入这个中间件
  • 中间件本身是一个方法,该方法接收三个参数:
    • Request 请求对象
    • Response 响应对象
    • next 下一个中间件
  • 当一个请求进入一个中间件之后,如果不调用 next 则会停留在当前中间件
  • 所以 next 是一个方法,用来调用下一个中间件的
  • 调用 next 方法也是要匹配的(不是调用紧挨着的那个
 app.use(function (req, res, next) {console.log('1')next()})app.use(function (req, res, next) {console.log('2')next()})

6.2 错误处理

  • 当调用 next 的时候,如果传递了参数,则直接往后找到带有 四个参数的应用程序级别中间件
  • 当发生错误的时候,我们可以调用 next 传递错误对象
  • 然后就会被全局错误处理中间件匹配到并处理之
app.get('/', function (req, res, next) {fs.readFile('.d/sa./d.sa/.dsa', function (err, data) {if (err) {next(err)}})
})

错误处理中间件

// 配置错误处理中间件
app.use(function (err, req, res, next) {res.status(500).send(err.message)
})

这篇关于NodeJS和Express框架的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1084969

相关文章

[分布式网络通讯框架]----Zookeeper客户端基本操作----ls、get、create、set、delete

Zookeeper数据结构 zk客户端常用命令 进入客户端 在bin目录下输入./zkCli.sh 查看根目录下数据ls / 注意:要查看哪一个节点,必须把路径写全 查看节点数据信息 get /第一行代码数据,没有的话表示没有数据 创建节点create /sl 20 /sl为节点的路径,20为节点的数据 注意,不能跨越创建,也就是说,创建sl2的时候,必须确保sl

【服务器08】之【游戏框架】之【加载主角】

首先简单了解一下帧率 FixedUpdate( )   >   Update( )   >   LateUpdate( ) 首先FixedUpdate的设置值 默认一秒运行50次 虽然默认是0.02秒,但FiexedUpdate并不是真的0.02秒调用一次,因为在脚本的生命周期内,FixedUpdate有一个小循环,这个循环也是通过物理时间累计看是不是大于0.02了,然后调用一次。有

Java中的集合框架使用技巧

Java中的集合框架使用技巧 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨Java中集合框架的使用技巧,这些技巧能够帮助我们更高效地处理数据和优化程序性能。 Java集合框架概述 Java集合框架提供了一组实现了各种集合接口的类和接口,用于存储和操作数据。它包括列表、集合、队列和映射等数据结构,能够满足不

[分布式网络通讯框架]----ZooKeeper下载以及Linux环境下安装与单机模式部署(附带每一步截图)

首先进入apache官网 点击中间的see all Projects->Project List菜单项进入页面 找到zookeeper,进入 在Zookeeper主页的顶部点击菜单Project->Releases,进入Zookeeper发布版本信息页面,如下图: 找到需要下载的版本 进行下载既可,这里我已经下载过3.4.10,所以以下使用3.4.10进行演示其他的步骤。

C# 日志框架Serilog使用

1、框架和说明        C#日志框架Serilog支持多种场景输出,简单验证了一下,比较方便        包的安装,推荐直接使用“推荐NuGet包管理器”安装Serilog.AspNetCore,常见的组件都已经集成在一个包中,使用比较方便 2、配置文件        Serilog可以由配置文件来定义行为,而且配置文件的修改即时生效。参考配置文件如下: {"Serilog":

Pytest和Unitest框架对比

在学到自动化的时候,很多同学都遇到了Pytest和Unitest框架,有的人是两个都学,但是学的不精只是知道分别怎么用.不了解两个区别是什么.有的是犹豫到底要学习那个框架.其实要做好自动化测试,是有必要了解不同框架之间的差异化的. Pytest 特点: Pytest采用了更简洁、更灵活的语法风格,使用“assert”语句来进行断言,Pytest可以自动发现并执行以“test_”开头的函数

mysql-mmm框架2

简介 MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序。MMM使用Perl语言开发,主要用来监控和管理MySQL Master-Master(双主)复制,虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时刻备选主的预热,可以说MMM这套脚本程

MySQL-MMM框架

一、环境简述 1、工作逻辑图 2、MySQL-MMM优缺点 优点:高可用性,扩展性好,出现故障自动切换,对于主主同步,在同一时间只提供一台数据库写操作,保证的数据的一致性。 缺点:Monitor节点是单点,可以结合Keepalived实现高可用。 3、MySQL-MMM工作原理 MMM(Master-Master replication managerfor Mys

基于LangChain框架搭建知识库

基于LangChain框架搭建知识库 说明流程1.数据加载2.数据清洗3.数据切分4.获取向量5.向量库保存到本地6.向量搜索7.汇总调用 说明 本文使用openai提供的embedding模型作为框架基础模型,知识库的搭建目的就是为了让大模型减少幻觉出现,实现起来也很简单,假如你要做一个大模型的客服问答系统,那么就把历史客服问答数据整理好,先做数据处理,在做数据向量化,最后保

简单 使用 的makefile编写 框架

1、指定编译器,如海思平台:CROSS_COMPILE=arm-hisiv100nptl-linux-; 2、指定编译工具:GCC=$(CROSS_COMPILE)gcc   CC=$(CROSS_COMPILE)g++; 3、使用 export 导出 子makefile 要用的变量; 4、定义变量的形式  指定 工程源文件 需要使用到的 “宏”,在后面的 LDFLAGS 里面使用 -D将其