Node.js-Express框架基本使用

Express介绍

Express是基于 node.js 的web应用开发框架,是一个封装好的工具包,便于开发web应用(HTTP服务)

Express基本使用

// 1.安装
npm i express
// 2.导入 express 模块
const express = require("express");
// 3.创建应用对象
const app = express();
// 4.创建路由, 根据请求url返回对应数据
// get 请求
app.get("/index", (req, res) => {res.send("hello express index")
})
// post 请求
app.post("/add", (req, res) => {res.send("hello express add")
})
// all 所有请求类型,* 代表匹配所有路由,不匹配的可以进行 404 
app.all("*", (req, res) => {res.send("404 Not Found")
})
// 5.监听端口
app.listen(8080, () => {console.log("8080端口服务已经启动...")
})

获取请求参数

// get 请求
app.get("/index", (req, res) => {console.log(req.path) // /indexconsole.log(req.query) // 查询参数 { name: "zs", age: "18" }console.log(req.ip) // 获取 ip 地址console.log(req.get("host")) // 获取请求头中的信息
})

获取 URL 路由参数

// http://192.168.0.1:8080/123.html
// get 请求
app.get("/:id.html", (req, res) => {console.log(req.params.id) // 123
})

响应参数设置

app.get("/response", (req, res) => {res.status(200); // 设置响应状态码res.set("参数名", "参数值"); // 设置响应头信息res.send("响应内容, 中文不会乱码") // 设置响应体res.redirect("http://www.baidu.com"); // 重定向地址 baidures.download(__dirname + "文件路径"); // 下载响应// json 格式响应res.json({name: "zs",age: "18"});// 响应文件内容, 可以将HTML内容响应到页面res.sendFile(path.resolve(__dirname, "文件路径"));
})

Express中间件

中间件(Middleware):是一个回调函数,像路由一样可以访问请求对象(request, response).
作用:使用函数封装公共操作,简化代码。

全局中间件

// 声明中间件函数
function recordMiddleware(req, res, next){// 代码逻辑next();
}// 使用中间件, 每个路由都会执行
app.use(recordMiddleware)

路由中间件

// 声明中间件函数
function recordMiddleware(req, res, next){// 代码逻辑if(req.query.name === "zs"){// 验证成功,继续执行后面的回调函数next();}else{res.send("没有权限")}
}
// 哪个请求需要验证,为哪个添加中间件函数
app.get("/admin", recordMiddleware, (req, res) => {res.send("登录成功")
})

静态资源中间件

注意事项
1、index.html文件为默认打开的资源
2、如果静态资源与路由规则同时匹配,谁先匹配谁就响应
3、路由响应动态资源,静态资源中间件响应静态资源

// 页面可以访问静态资源,CSS、图片等
// 静态资源中间件的设置,将当前文件夹下的public目录作为网站的根目录
app.use(express.static(__dirname + "/public"));

防盗链

// 检测请求头中的referer,防止图片资源被别人使用
app.use((req, res, next) => {// 获取 referer let referer = req.get("referer");if(referer){let url = new URL(referer);let hostname = url.hostname;if(hostname !=== "当前页面域名"){res.send("404")return}}next();
})

路由模块化

homeRouter.js

// 引入 express 模块, 封装 home 路由
const express = require("express");
// 创建路由对象
const router = express.Router();
router.get("/home", (req, res) => {res.send("这是home页面")
})
// 向外暴漏 router 
module.exports = router;

index.js

// 引入 express 模块
const express = require("express");
// 引入封装的 home 路由
const homeRouter = require("./router/homeRouter.js");
const app = express();
// 使用 homeRouter 路由,页面就可以访问 /home 了。
app.use(homeRouter)

ejs模板引擎

  • 安装ejs
npm i ejs
  • 设置模板引擎
app.set("view engine", "ejs");
  • 设置模板文件存放位置
const path = require("path")
app.set("views", path.resolve(__dirname, "./views"));
  • render响应
// index.js 文件
app.get("/home", (req, res) => {let title = "请求成功!";// render(模板文件名, 数据)res.render("home", {title: title})
})// home.ejs 文件
// 响应的页面中就展示---请求成功!
<%= title %>

express generator 应用程序生成器

可以快速创建一个应用的骨架,将文件结构和基础代码搭建出来。

// 1. 安装 express generator 应用程序生成器
npm i -g express-generator
// 2. 创建 ejs 项目文件夹
npm -e ejs项目名称
// 3. 安装依赖包
npm i

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/54914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线程的生命周期

线程的生命周期 与人有生老病死一样&#xff0c;线程也同样要经历开始&#xff08;等待&#xff09;、运行、挂起和停止四种不同的状态。这四种状态都可以通过Thread类中的方法进行控制。下面给出了Thread类中和这四种状态相关的方法。 // 开始线程 public void start( ); …

npm和yarn的区别?

文章目录 前言npm和yarn的作用和特点npm和yarn的安装的机制npm安装机制yarn安装机制检测包解析包获取包链接包构建包 总结后言 前言 这一期给大家讲解npm和yarn的一些区别 npm和yarn的作用和特点 包管理&#xff1a;npm 和 yarn 可以用于安装、更新和删除 JavaScript 包。它们提…

软件开发企业SDL安全培训案例

1.背景 随着计算机技术的发展、internet及mobile应用的普遍使用,软件安全像功能、性能、稳定性一样是计算机系统的一个非常重要部分。没有安全的软件,任何美好的功能都是徒劳的,没有安全的软件,公司的机密数据、客户隐私、系统的可靠性都得不到保障.如何有效评估、开发安全、可…

elemenPlus ElMessage 字符串如何换行问题

因为后端返回的数据是一长串&#xff0c;而且带有\r,\n等换行符&#xff0c;但是并没有生效。前端写法&#xff1a; // 抛出错误ElMessage.error(msg);我们知道\r&#xff0c;\n&#xff0c;\r\n 是在不同系统下的换行符的表示&#xff0c;但在JavaScript返回字符串中并没有生效…

TiDB 源码编译之 TiProxy 篇

作者&#xff1a; ShawnYan 原文来源&#xff1a; https://tidb.net/blog/3d57f54d TiProxy 简介 TiProxy 是一个基于 Apache 2.0 协议开源的、轻量级的 TiDB 数据库代理&#xff0c;基于 Go 语言编写&#xff0c;支持 MySQL 协议。 TiProxy 支持负载均衡&#xff0c;接收来…

复习leetcode

​​​​​​460. LFU 缓存 31. 下一个排列 322. 零钱兑换 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台

什么是模块化编程?在JavaScript中如何实现模块化编程?什么是ES6模块?与CommonJS模块相比有哪些区别和联系?

1、什么是模块化编程&#xff1f;在JavaScript中如何实现模块化编程&#xff1f; 模块化编程是一种编程范式&#xff0c;它将代码分解为较小的、可重用的模块&#xff0c;使得代码更易于维护和扩展。在JavaScript中&#xff0c;可以使用ES6模块化语法来实现模块化编程。 ES6模…

【滑动窗口】leetcode209:长度最小的子数组

一.题目描述 长度最小的子数组 二.思路分析 题目要求&#xff1a;找出长度最小的符合要求的连续子数组&#xff0c;这个要求就是子数组的元素之和大于等于target。 如何确定一个连续的子数组&#xff1f;确定它的左右边界即可。如此一来&#xff0c;我们最先想到的就是暴力枚…

Linux 多线程基础

文章目录 前言一、多线程基础函数1. pthread_create2. pthread_self3. pthread_exit4. pthread_join5. pthread_cancel6. pthread_detach 二、线程间的共享数据三、多线程 &#xff0c;进程对比总结 前言 一、多线程基础函数 1. pthread_create 创建新的线程。 #include <…

使用EventLog Analyzer 进行路由器监控

路由器是任何计算机网络的构建块&#xff0c;引导网络中的流量&#xff0c;管理员需要确保路由器已配置并正常工作&#xff0c;以确保网络安全。 监控路由器中的用户活动 在网络安全方面&#xff0c;与路由器相关的风险是一个严重的问题。具有松散安全策略的网络使入侵者可以…

kafka--技术文档--基本docker中安装<单机>-linux

安装zookeeper 阿丹小科普&#xff1a; Kafka在0.11.0.0版本之后不再依赖Zookeeper&#xff0c;而是使用基于Raft协议的Kafka自身的仲裁机制来替代Zookeeper。具体来说&#xff0c;Kafka 2.8.0版本是第一个不需要Zookeeper就可以运行Kafka的版本&#xff0c;这被称为Kafka Raf…

3 自制一个集群分发脚本

1. 随便取了一个名字&#xff1a;xsync 2. 在一个配置环境变量的目录下&#xff0c;我是放在了/opt/software下&#xff0c;这个路径我是配置了环境变量的。 3. 编辑脚本&#xff1a;vim xsync #!/bin/bash#1. 判断参数个数 if [ $# -lt 1 ] thenecho Not Enough Arguement!…

【⑮MySQL | 视图】概述 | 创建 | 查看 | 更新 | 修改 | 删除

前言 ✨欢迎来到小K的MySQL专栏&#xff0c;本节将为大家带来MySQL视图概述 | 创建 | 查看 | 更新 | 修改 | 删除的分享✨ 目录 前言1.视图概述2.创建视图3.查看视图4.更新视图数据5.修改视图6.删除视图总结 1.视图概述 1.1 为什么使用视图&#xff1f; 视图一方面可以帮我们使…

如何构建多域名HTTPS代理服务器转发

在当今互联网时代&#xff0c;安全可靠的网络访问是至关重要的。本文将介绍如何使用SNI Routing技术来构建多域名HTTPS代理服务器转发&#xff0c;轻松实现多域名的安全访问和数据传输。 SNI代表"Server Name Indication"&#xff0c;是TLS协议的扩展&#xff0c;用于…

2023年国赛 高教社杯数学建模思路 - 案例:随机森林

文章目录 1 什么是随机森林&#xff1f;2 随机深林构造流程3 随机森林的优缺点3.1 优点3.2 缺点 4 随机深林算法实现 建模资料 ## 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是随机森林&#xff…

Cesium中关于新版本中建筑贴图模糊化得处理方式

运用场景&#xff1a; 在项目中有需要将3Dtiles加载得lod1,lod2.5等模型得贴图进行模糊化的相关功能 问题描述 例如&#xff1a;如果使用maximumScreenSpaceError的方式进行模糊化也可以达到我们需要得效果,但是需要我们去调整视角查看,在一定得视角范围得模型才会模糊化,不能…

数据结构(Java实现)-二叉树(下)

获取二叉树的高度 检测值为value的元素是否存在(前序遍历) 层序遍历 判断一棵树是不是完全二叉树 获取节点的路径 二叉树的最近公共祖先

Docker基本部署和相关操作

1.安装docker服务&#xff0c;配置镜像加速器 1、yum安装并且添加源信息 yum install yum-utils device-mapper-persistent-data lvm2 -y yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo2、修改一些配置信息 sed…

Kaggle回归问题Mercedes——Benz Greener Manufacturing

目录 前言1 题目介绍2 数据清洗3 数据可视化分析4 模型训练5 源码 前言 这是我在大三选修课的课程设计&#xff0c;内容参考了Kaggle上高赞的代码&#xff0c;有详细批注&#xff0c;整体比较基础&#xff0c;结构相对完整&#xff0c;便于初学者学习。这个是一个回归问题&…

⌈算法进阶⌋图论::拓扑排序(Topological Sorting)——快速理解到熟练运用

目录 一、原理 1. 引例&#xff1a;207.课程表 2. 应用场景 3. 代码思路 二、代码模板 三、练习 1、210.课程表Ⅱ&#x1f7e2; 2、2392.给定条件下构造举证&#x1f7e1; 3、310.最小高度树 &#x1f7e1; 一、原理 1. 引例&#xff1a;207.课程表 就如大学课程安排一样&…