Node【七】初识Express框架

news2024/11/25 14:22:12

文章目录

  • 🌟前言
  • 🌟Express框架
    • 🌟1.什么是框架
    • 🌟2.express安装
    • 🌟3.创建web服务
        • 基本遵循之前的四个步骤:
    • 🌟4.路由
      • 🌟 由 :请求方式+请求路径
        • (1)get发送数据
        • (2)get接收数据
        • (3)get动态路由
        • (4)post接收数据
        • (5)post传递数据
    • 🌟5.模板引擎
      • 🌟 什么是模板引擎
      • 🌟 原理
      • 🌟 在express中使用模板引擎
      • 🌟 设置模板引擎后缀
      • 🌟 ejs的标签
      • 🌟 语法
        • 🌟 包含include
        • 🌟 自定义分隔符
    • 🌟6.静态文件托管
  • 🌟写在最后

在这里插入图片描述

🌟前言

哈喽小伙伴们,新的专栏 Node 已开启;这个专栏里边会收录一些Node的基础知识和项目实战;今天我们开始这个专栏的第七篇文章,带领大家初识一下 Express框架 ;让我们一起来看看吧🤘

🌟Express框架

Express文档

🌟1.什么是框架

可以理解为是一条路,要遵守一定的规则,就会给咱们提供很多便利。为了规范开发流程,降低开发难度,提高开发效率而制定的一套共人们使用的功能模块或者是编程的约定。

🌟2.express安装

  1. mkdir myapp 创建项目目录。
  2. cd myapp==>npm init。
  3. npm install express --save (可替换为[-S])。

🌟3.创建web服务

基本遵循之前的四个步骤:

  • 导入需要使用的express包
  • 创建web实例
  • 定义允许访问的地址 ( 路由 )
    • 原先的输出: res.end()
    • 使用express后的输出: res.send()
  • 启动服务 (监听端口)
//前提是安装好express,导包
let express=require('express');
//创建web服务
let app=express();

//配置路由
  //监听  get请求
  //req  请求对象
  //res  响应对象 
app.get("请求的URL",(req,res)=>{
    //逻辑
    //向客户端响应数据
    res.send({id:1,name:'张三'})
});
//监听post请求
app.post("请求的URL",(req,res)=>{
    //逻辑
});
......

//开启服务器
app.listen(8000,()=>{})

🌟4.路由

接收发送请求,分析请求路径(pathname),分发到指定的位置。

🌟 由 :请求方式+请求路径

(1)get发送数据

查询字符串:?key=value&key=value

(2)get接收数据

Express中内置了一个API,可以直接通过request.query来获取。

request.query

// 在express中可以直接通过 request.query 来获取字符串参数
// http://127.0.0.1:4000/about?name=zhangsan&message=hello
app.get('/about',function (request,response) {
  console.log(request.query);
  response.send('关于我');
})

(3)get动态路由

/path/:id

接受数据:req.params

(4)post接收数据

在Express中没有内置获取 post 请求体的API,我们需要使用第三方插件 body-parser

安装 npm install body-parser

配置 body-parser

进行下方代码的配置,就会在 request 请求对象上就会多出来一个属性:body 我们就可以直接通过 request.body 来获取表单 POST 请求体的数据了

app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())

使用

var express = require('express')
var bodyParser = require('body-parser')

var app = express()

app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())

app.post('/about',function (request,response) {
  console.log(request.body);
})

(5)post传递数据

const express = require('express');
const app = express();
app.post('/api/post', function(req, res) {
  // 直接返回对象
  res.send({ name: 'abc' });
});
app.listen('8088', () => {
  console.log('8088');
});

🌟5.模板引擎

🌟 什么是模板引擎

模板引擎是一个将页面模板和要显示的数据结合起来生成HTML页面的工具。

  1. 引入模板引擎
  2. 设置模板目录
  3. 设置模板引擎
  4. 渲染模板
app.render(viewname,data,callback)

🌟 原理

function render(tpl,data){
    return tpl.replace(/\{\{(\w+)\}\}/g,function(input,words){
        return data[words];
        })
}
var result = render('<h1>{{title}}</h1>',{title:'人生如此美好'})

🌟 在express中使用模板引擎

app.set('views','./views'); //设置模板存储位置
app.set('view engine','ejs'); //设置模板引擎

🌟 设置模板引擎后缀

app.set('views',path.join(__dirname,'views')); //设置模板存储位置
app.set('view engine','html');
app.engine('html',require('ejs').renderFile); //使用ejs模板引擎解析html

🌟 ejs的标签

  • <% ‘Scriptlet’ 标签, 用于控制流,没有输出
  • <%= 向模板输出值(带有转义)
  • <%- 向模板输出没有转义的值
  • <%# 注释标签,不执行,也没有输出
  • <%% 输出字面的 ‘<%’
  • %> 普通的结束标签

🌟 语法

<% code %> //javascript代码
<%= code %> //显示替换过html的特殊字符内容
<%- code %> //显示原始html内容(支持标签)

<%= code %><%- code %>的区别,code为普通字符串两者没有区别,为标签时<%- code %>会显示标签效果

🌟 包含include

<% include header %>
<% include tpl/footer %>

🌟 自定义分隔符

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
var ejs = require('ejs');
ejs.delimiter = '$';
app.engine('ejs',ejs.renderFile);

🌟6.静态文件托管

设置静态托管:app.use( express.static ( ) )

本方法一定要写在具体的路由监听之前。

app.use(express.static('static'));
//让app实例去使用一些内容(常规的方法,也是一些中间件);
//express.static("public")中的参数是静态路由资源所在的目录的名字

//其还支持虚拟的前缀用于迷惑被人
app.use('/gjsgadjgajdgadgajdga',express.static('static'));

前缀的使用意义:

  • 可以迷惑被人,一定程度上阻止被人猜测我的服务器的目录结构
  • 可以帮助我们更好的阻止和管理静态资源

🌟写在最后

更多Node知识以及API请大家持续关注,尽请期待。各位小伙伴让我们 let’s be prepared at all times!

✨原创不易,还希望各位大佬支持一下!
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!

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

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

相关文章

JAVA+SQL离散数学题库管理系统的设计与开发

题库、试卷建设是教学活动的重要组成部分&#xff0c;传统手工编制的试卷经常出现内容雷同、知识点不合理以及笔误、印刷错误等情况。为了实现离散数学题库管理的信息化而开发了离散数学题库管理系统。 该系统采用C/S 模式&#xff0c;前台采用JAVA&#xff08;JBuilder2006&am…

面试官:自动化测试都没弄明白,你怎么敢来面试的?

最近看了很多简历&#xff0c;很多候选人年限不小&#xff0c;但是做的都是一些非常传统的项目&#xff0c;想着也不能通过简历就直接否定一个人&#xff0c;何况现在大环境越来 越难&#xff0c;大家找工作也不容易&#xff0c;于是就打算见一见。 在沟通中发现&#xff0c;由…

全国青少年信息素养大赛图形化编程初赛·模拟二卷,含答案解析

全国青少年电子信息智能创新大赛 图形化编程选做题模拟二卷 一、单选题 1. 下图中的程序执行一次之后,“我的变量”最终的值是?( ) A、0或者1 B、true或者false C、包含或者不包含 D、成立或者不成立

纯虚函数和抽象类

什么时候使用纯虚函数: 某些类,在现实角度和项目实现角度,都不需要实例化(不需要创建它的对象),这个类中定义的某些成员函数,只是为了提供一个形式上的借口,准备让子类来做具体化的实现,此时,这个方法就可以定义为"纯虚函数",包含纯虚函数的类,就称为抽象类. 纯虚函…

token详解

token详解前言什么是token&#xff1f;为什么要使用token&#xff1f;那么如何使用token呢&#xff1f;使用Token进行身份验证和授权的过程具体步骤项目上如何运用的tokentoken过期了什么办&#xff1f;总结升华前言 本篇博客主要从什么是token&#xff1f;为什么要使用token&…

C++ 图系列之基于有向无环图的拓扑排序算法

1. 前言 有向无环图&#xff0c;字面而言&#xff0c;指图中不存在环(回路)&#xff0c;意味着从任一顶点出发都不可能回到顶点本身。有向无环图也称为 DAG&#xff08;Directed Acycline Graph&#xff09;。 有向无环图可用来描述顶点之间的依赖关系&#xff0c;依赖这个概…

MLX90640 热成像 STM32

点击此处了解详情点击此处了解详情点击此处了解详情点击此处了解详情点击此处了解详情 1、描述 这是一款手持式多功能热像仪&#xff0c;小巧轻便&#xff0c;搭载3.2英寸TFT显示屏、MLX90640热红外探头&#xff0c;锂电池供电&#xff0c;可以在各种场合使用&#xff0c;温度…

( “树” 之 DFS) 572. 另一棵树的子树 ——【Leetcode每日一题】

572. 另一棵树的子树 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tr…

Densely Connected Convolutional Networks(引言翻译(有选择性))

翻译得有可能会不太专业&#xff0c;望见谅的同时&#xff0c;如果有些地方翻译错了&#xff0c;欢迎批评指正&#xff01; as information about the input or gradient passes through many layers, it can vanish and "wash out" by the time it reaches the end …

淄博烧烤、洛阳汉服......爆火,揭秘实体店客流爆满的秘诀!

淄博烧烤、云南泼水、洛阳穿越...... 沉寂了3年后&#xff0c;线下实体消费终于又开始火热起来&#xff0c;临近五一小长假&#xff0c;国内外旅游订单出现井喷式增长&#xff0c;线下消费持续迎来新一轮的高峰。 而这些热点&#xff0c;也带动了周边很多相关的实体店&#xff…

美团外卖平台的部分外卖 SPU数据实操练习

一、环境要求 Hadoop hive spark hbase开发环境 开启hadoop&#xff1a;start-all.sh开启zookeeper&#xff1a;zkServer.sh start开启hive&#xff1a;nohup hive --service metastore &nohup hive --service hiveserver2 & 打开hive界面&#xff1a;beeline -u j…

Ubuntu16.04安装NCNN和Opencv

一、安装NCNN 官网&#xff1a;NCNN官方文档 On Debian, Ubuntu or Raspberry Pi OS, you can install all required dependencies using: 首先安装NCNN的依赖项&#xff0c;根据官网安装以下依赖项。 sudo apt install build-essential git cmake libprotobuf-dev protobuf-…

dc-4靶机渗透

1.信息搜集&#xff0c;扫描存活主机&#xff0c;扫描端口&#xff0c;服务,发现开放80&#xff0c;22端口&#xff0c;cms没有看到 nmap 192.168.85.0/24 nmap -p1-66535 192.168.85.175 nmap -sv 192.168.85.1752.访问网站&#xff0c;发现登录框&#xff0c;根据提示&#…

360安全卫士 - 设置技巧 / 关闭广告

360安全卫士 - 设置技巧 / 关闭广告前言同步设置基本设置弹窗设置开机小助手安全防护中心漏洞修复木马查杀功能大全管理360文件夹游戏管家健康助手前言 360安全卫士是一款免费的PC安全软件&#xff0c;拥有垃圾清理、病毒查杀、启动项管理等功能。虽然有一些广告&#xff0c;但…

【Python】python技能树之包含元祖的列表升降序

文章目录前言一、实际操作二、使用步骤总结前言 大家都知道&#xff0c;在Python里面可以使用.sort方法或者sorted函数对各种数据进行排序&#xff0c;例如&#xff1a; 一、实际操作 a [2, 3, 1, 9, 3, 7, 4] a.sort() b [2, 3, 1, 9, 3, 7, 4] c sorted(b, reverseTrue…

Linux中的网络

文章目录一 、查看网络配置1.2 route命令—查看路由条目1.3 1.3hostname命令—查看主机名称1.4netstat命令—查看网络连接情况二 、测试网络连接2.1 ping 命令2.2 traceroute命令—跟踪数据包的路由途径2.3 mtr—动态跟踪网络2.4 nslookup命令—测试域名解析三 、使用网络配置命…

迎难而上,阿里高频考点2023Java岗面试突击手册

上周我接到一位粉丝的私信说目前互联网形势实在对他太不友好&#xff0c;感觉自己每个技术栈都会一点&#xff0c;但不是完全精通。基本二面三面的时候就挂了&#xff0c;已经完全不知道该朝哪个方向努力了&#xff0c;希望可以给他一些建议和方法指导。那么&#xff0c;本次就…

[golang gin框架] 20.Gin 商城项目-商品模块功能

一.商品模块数据表ER图关系分析商品模块数据表相关功能关系见:[golang gin框架] 16.Gin 商城项目-商品模块数据表ER图关系分析二.商品相关界面展示商品列表该商品列表有如下功能1.增加商品按钮:跳转到增加商品页面2.搜索功能:输入商品名称,点击搜索3.修改商品字段(上架,精品,新…

软件测试入门第一步:编写测试报告

什么是测试报告&#xff1f; 1、说明&#xff1a;是指把测试的过程和结果写成文档&#xff0c;对发现的问题和缺陷进行分析&#xff0c;为纠正软件的存在的质量问题提供依据&#xff0c;同时为软件验收和交付打下基础。 ps. 【测试过程和测试结果的分析报告&#xff0c;以及上线…

大爽pygame入门教程 第一节 基础知识 练习提示与答案

作者自我介绍&#xff1a;大爽歌, b站小UP主 &#xff0c;编程1对1辅导老师 1 逐行展示 思路提示 点击触发 之前的多行展示&#xff0c;是通过循环实现的。 这一回要点击触发一行的展示&#xff0c;不能直接使用循环了。 这里我们往更深层次去思考一下&#xff1a; 之前循环…