Node【初识Express框架】

news2025/1/13 6:17:36

文章目录

  • 🌟前言
  • 🌟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/444224.html

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

相关文章

从传统管理到智慧水务:数字化转型的挑战与机遇

概念 智慧水务是指利用互联网、物联网、大数据、人工智能等技术手段&#xff0c;将智能化、信息化、互联网等技术与水务领域相结合&#xff0c;通过感知、传输、处理水质、水量、水价等数据信息&#xff0c;对水资源进行全面监测、综合管理、智能调度和优化配置的智能化水务系…

电商平台商品数据爬虫分析(test阶段可对接测试)

1.简单说明 京东&#xff0c;淘宝&#xff0c;天猫&#xff0c;&#xff0c;淘特&#xff0c;拼多多&#xff0c;阿里巴巴&#xff0c;1688&#xff0c;抖音&#xff0c;苏宁&#xff0c;亚马逊中国 &#xff0c;lazada&#xff0c;速卖通等全球50多个知名平台抓取数据&#x…

蓝牙耳机哪个品牌音质好?300到400的蓝牙耳机推荐

不知道从什么时候开始&#xff0c;越来越喜欢安静和独处&#xff0c;去外面闲逛也总是佩戴上蓝牙耳机&#xff0c;享受音乐带来的美妙&#xff01;蓝牙耳机便利性也让很多小伙伴开始选择&#xff0c;出门在外&#xff0c;背包里面永远装着蓝牙耳机&#xff0c;以备不时之需&…

CANoe使用记录(二):Trace界面介绍

目录 1、概述 2、Trace界面介绍 2.1、右键配置 2.2、显示Title信息 2.3、改变窗口颜色 2.4、详细视图 2.5、静态视图 2.6、差异窗口 2.7、预过滤器 2.8、过滤分析 3.9、保存报文 3.10、其他类型简述 1、概述 Trace界面用于监控报文的界面&#xff0c;此界面包含很…

缓存优化---环境搭建

缓存优化 为什么要使用redis缓存&#xff1f; 问题说明 用户数量多&#xff0c;系统访问大&#xff0c;频繁访问数据库&#xff0c;系统性能下降&#xff0c;用户体验差 环境搭建 maven坐标 在项目中的pom.xml文件中导入spring data redis的maven坐标&#xff1a; <depen…

数学建模第四天:数学建模算法篇之整数规划、指派问题及其求解方法

目录 一、前言 二、整数规划模型 1、整数规划特征 2、分枝定界法 ①分枝定界法的步骤 ②实际解题 三、0-1整数规划 1、隐枚举法 ①隐枚举法的步骤&#xff1a; ②案例 2、匈牙利法 ①指派问题 ②匈牙利法步骤 ③案例 一、前言 我们先来看一个例子&#x…

【Linux】Linux中的常用指令和将java程序运行环境部署到Linux

目录 一.Linux的常用指令 使用客户端进行登录与退出 我们使用xshell这个客户端进行用户的创建和登录 退出&#xff1a; 快捷键 IS PWD cd touch echo cat mkdir tree rm mv cp find man less vim date ps grep netstat 二.Linux的权限问题 用户操作 …

C 语言与嵌入汇编

文章目录 一、cmake构建汇编语言二、实例三、补充知识1、enable_language2、 汇编 四、AT&T汇编1、GNUC C 语言嵌入汇编2、GNUC 汇编 一、cmake构建汇编语言 Linux下在CMakeLists中加入 ENABLE_LANGUAGE(ASM) # GAS(AT&T) 或 ENABLE_LANGUAGE(ASM_NASM) # NASM(Intel) …

Windows逆向安全(一)之基础知识(十四)

指针 什么是指针 一般关于指针的解释都离不开地址。这里先暂且忘记这个概念 指针其实也是一种数据类型&#xff0c;和先前学习的int float等数据类型没有实质上的区别&#xff0c;只不过这个数据类型是在先前学习的所有数据类型后面加上若干个*号&#xff0c;如char *&#…

数字化时代,如何推动实体经济和数字经济的融合

实体经济是一国经济的立身之本和命脉所在&#xff0c;数字经济是当今世界科技革命和产业变革的阵地前沿&#xff0c;推动数字经济和实体经济融合发展&#xff0c;已经成为新形势下主动把握新机遇、打造新引擎、实现经济高质量发展的必然选择。 领域融合 真正能够成为现代社会…

Pyhon实现多线程 —— threading(含源码)

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,YOLO,活动领域博主爱笑的男孩。擅长深度学习,YOLO,活动,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typecollect个人…

LRU扩展LRU-K、2Q算法实现分析

LRU算法的缓存污染如何解决&#xff1f; 一、LRU-K算法 1、算法思想 LRU-K中的K代表最近使用的次数&#xff0c;因此LRU可以认为是LRU-1。LRU-K的主要目的是为了解决LRU算法“缓存污染”的问题&#xff0c;其核心思想是将“最近使用过1次”的判断标准扩展为“最近使用过K次”…

【CocosCreator入门】CocosCreator组件 | PageView(页面视图)组件

Cocos Creator 是一款流行的游戏开发引擎&#xff0c;具有丰富的组件和工具&#xff0c;其中的PageView组件是一种用于实现分页视图效果的重要组件。它可以让我们在游戏中实现各种分页视图效果&#xff0c;例如引导页、轮播图等。 目录 一、组件介绍 二、组件属性 三、组件使…

OpenCV算法加速的一些学习总结

一、概述 算法加速在实际软件层面应用来说 大数据和复杂计算的过程中 算法优化&#xff0c;指降低算法计算复杂度&#xff0c;设计新算法快速求解&#xff0c;比如Hungarian匹配算法。或牺牲一些内存&#xff0c;预计算一些重复计算的过程&#xff0c;减少程序层面的复杂度。 …

c语言实例练习笔记

本博文参考题目的地址看右边----》C 语言实例 | 菜鸟教程 以下为个人边练习边敲记录&#xff08;解法不一定和官方一样&#xff0c;会自己扩展一些&#xff0c;练习嘛&#xff0c;肯定是学到的都用上&#xff0c;算检验之前的学进去的是不是对的。&#xff09; C 语言实例 - …

【项目管理】ubuntu2204 图片合成视频

ubuntu 22.04 多张图片合成视频&#xff0c;多个视频合成一个大视频 环境&#xff1a; ubuntu 22.04 LTS 工具&#xff1a; ffmpeg ffmpeg 多张图片合成视频 在 ubuntu 下全选目录下的所有文件&#xff0c;右键 rename, 选择 1,2,3,4 即可&#xff1b;当然也可以使用其他命名方…

uni-app 中模拟器真机运行app

之前打包过app&#xff0c;调试方式是用usb连接电脑和手机&#xff0c;过程中也遇到了很多问题&#xff0c;忘记了怎么解决的&#xff0c;今天又遇到了打包app的项目&#xff0c;因为在开发app这方面经验不足&#xff0c;所以踩了很多坑&#xff0c;花了好几个小时才研究好app在…

学系统集成项目管理工程师(中项)系列06a_信息系统安全管理(上)

1. 信息安全 1.1. 保护信息的保密性、完整性、可用性 1.2. 另外也包括其他属性&#xff0c;如&#xff1a;真实性、可核查性、不可抵赖性和可靠性 2. 信息安全属性及目标 2.1. 保密性(Confidentiality&#xff09; 2.1.1. 信息不被泄露给未授权的个人、实体和过程或不被其…

【python】统计代码行数 | 统计当前文件夹里所有代码文件的行数

背景 写了一堆.cs文件 想看看一共写了多少行 代码 import os import chardet# Check if a file has the given extension def has_extension(file, extension):return os.path.splitext(file)[1] extension# Count the number of non-empty lines in a file def count_line…

拍照时脸背光怎么办?拍摄的逆光人像照如何修复才能更好看?

拍摄逆光人像会产生迷人的轮廓光&#xff0c;发丝看起来会很美丽&#xff0c;并可能拍到好看的星芒&#xff0c;但是&#xff01;直接拍摄很可能经常会对不上焦&#xff0c;或者会拍出大黑脸&#xff0c;这时就需要很多技巧啦。 完成一张好的逆光照片需要前期拍摄和后期修图相…