day24Node-node的Web框架Express

news2025/5/28 1:58:17

1. Express 基础

1.1 什么是Express 

node的web框架有Express 和 Koa。常用Express 。

Express 是一个基于 Node.js 的快速、极简的 Web 应用框架,用于构建 服务器端应用(如网站后端、RESTful API 等)。它是 Node.js 生态中最流行的框架之一,以轻量、灵活和易用著称。 

npm install express --save
或者
yarn add express -S

Koa 是由 Express 背后的团队设计的一个新的 Web 框架,旨在成为 Web 应用和 API 的更小、更具表现力和更强大的基础。 通过利用异步函数,Koa 允许你放弃回调并大大提高错误处理能力。 Koa 的核心中没有捆绑任何中间件,它提供了一套优雅的方法,使编写服务器变得快速而愉快。 

1.2 Express特色和项目创建

1.2.1 Express特色

  • Web 应用:Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用。
  • API:丰富的 HTTP 快捷方法和任意排列组合的 Connect 中间件,让你创建健壮、友好的 API 变得既快速又简单。
  • 性能:Express 不对 Node.js 已有的特性进行二次抽象,我们只是在它之上扩展了 Web 应用所需的基本功能。

1.2.2 项目创建

服务端

1.在项目文件下创建一个新文件exprss1,在该文件下执行npm init -y 初始化。

2. 编写package.json文件。执行npm i 下载依赖

{
  "name": "express1",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "PORT=4000 nodemon"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express":"^4.21.0"
  },
  
  "devDependencies": {
    "nodemon":"^3.1.4"
  }
}

3. 新建一个入口文件index.js 。在执行npm start 开启项目

4. 编写入口文件index.js。

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

...
app.listen(process.env.PORT);

简单的服务已经搭建成功

5. 下面的内容在该项目中进行讲解。 

1.3 express的通信应用

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

 1.3.1 app.get

app.get:主要用于前后端get通信方式处理。

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

app.get("/a",function(req,res){
    res.send("hello")
})
app.listen(4001);

案例1:编写 express1文件下的index.js 

使用浏览器直接访问服务端 

 

1.3.2 解决express的通信的跨域问题

客户端

1. 在项目文件下新建一个clint客户端文件。

2. 在clint客户端文件打开集成终端中执行 npm i axios

3. 在clint客户端文件新建一个index.html

4. 在index.html文件中引入axios,并编写index.html。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

</head>
<body>
   
    <script type="module">
        1. 引入axios
        import axios from "./node_modules/axios/dist/esm/axios.js"

        2.访问服务器/a路劲,携带参数a=1,b=2
        axios.get("http://localhost:4000/a?a=1&b=2").then((res)=>{
            console.log(res);
        })
    </script>
</body>
</html>

服务端

 express1文件下的index.js 保持不变。

客户端直接访问服务端 涉及跨域问题会报错

解决方法在服务端express1的package.json文件中编写添加cors跨域依赖。执行npm i 下载依赖。再次执行npm start开启项目。

修改express1的package.json文件:

{
  "name": "express1",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "PORT=4000 nodemon"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express":"^4.21.0",
     添加依赖
    "cors":"^2.8.5"
  },
  
  "devDependencies": {
    "nodemon":"^3.1.4"
  }
}

修改服务端express1文件下的index.js ,引入cors模块。再次使用客户端访问服务端。

const express=require("express");
const app=express();
const cors=require("cors");


一次性解决所有跨域,允许所有域名
app.use(cors());


app.get("/a",function(req,res){

    服务端解析客户端url的方法1:
    console.log(req.url); // a?a=1&b=2

    服务端解析客户端url的方法2express 自动解析了客户端url带来的search部分参数
    console.log(req.query); // {a:1,b:2}

    服务端解析客户端url的方法3:路径,不带参数
    console.log(req.path); // /a

    服务端向客户端发送数据的方法:express 有send方法可以发送任何类型的数据,都会自动转换
    //res.send("aaa");
    res.send({a:1,b:2})

})

app.listen(process.env.PORT);

服务端解析客户端的url: 

服务端向客户端发送数据:

 1.3.3 app.post

app.post: 主要用于前后端post通信方式处理。

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

app.post("/a",function(req,res){
    res.send("hello")
})

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

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

相关文章

让MySQL更快:EXPLAIN语句详尽解析

前言 在数据库性能调优中&#xff0c;SQL 查询的执行效率是影响系统整体性能的关键因素之一。MySQL 提供了强大的工具——EXPLAIN 语句&#xff0c;帮助开发者和数据库管理员深入分析查询的执行计划&#xff0c;从而发现潜在的性能瓶颈并进行针对性优化。 EXPLAIN 语句能够模…

[CSS3]rem移动适配

前言 什么是移动端适配? 让页面的元素在屏幕尺寸变化时, 同比放大或缩小 移动适配的方案 rem&#xff1a;目前多数企业在用的解决方案 vw/vh&#xff1a;未来的解决方案 rem 体验rem适配 目标: 能够使用rem单位设置网页元素的尺寸 网页效果: 屏幕宽度不同&#xff0c;网…

向量数据库及ChromaDB的使用

什么是向量数据库&#xff1f; 向量数据库&#xff08;Vector Database&#xff09;&#xff0c;也叫矢量数据库&#xff0c;主要用来存储和处理向量数据。 在数学中&#xff0c;向量是有大小和方向的量&#xff0c;可以使用带箭头的线段表示&#xff0c;箭头指向即为向量的方…

CodeBuddy实现pdf批量加密

本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 前言 在信息爆炸的时代&#xff0c;PDF 格式因其跨平台性和格式稳定性&#xff0c;成为办公、学术、商业等领域传递信息的重要载体。从机密合同到个人隐私文档&#xff0c…

运行打印Hello World启动了多少线程?

序言 看网上说阿里二面问到了一个看似最简单且没有标准答案的一个问题&#xff0c;所有学习编程都是从打印hello World开始的&#xff0c;那运行打印启动了多少个线程&#xff1f; 启动了多少线程&#xff1f; 在运行一个简单的 “Hello World” 程序时&#xff0c;启动的线…

java交易所,多语言,外汇,黄金,区块链,dapp类型的,支持授权,划转,挖矿(源码下载)

目前这套主要是运营交易所类型的&#xff0c;授权的会贵点&#xff0c;编译后的是可以直接跑的&#xff0c;图片也修复了&#xff0c;后门也扫了 都是在跑的项目支持测&#xff0c;全开源 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/90887047 更多…

(已开源-CVPR2024) RadarDistill---NuScenes数据集Radar检测第一名

本文介绍一篇Radar 3D目标检测模型&#xff1a;RadarDistill。雷达数据固有的噪声和稀疏性给3D目标检测带来了巨大挑战。在本文中&#xff0c;作者提出了一种新的知识蒸馏(KD)方法RadarDistill&#xff0c;它可以通过利用激光雷达数据来提高雷达数据的表征。RadarDistill利用三…

【MySQL】 数据库基础数据类型

一、数据库简介 1.什么是数据库 数据库&#xff08;Database&#xff09;是一种用于存储、管理和检索数据的系统化集合。它允许用户以结构化的方式存储大量数据&#xff0c;并通过高效的方式访问和操作这些数据。数据库通常由数据库管理系统&#xff08;DBMS&#xff09;管理&…

MongoDB 错误处理与调试完全指南:从入门到精通

在当今数据驱动的世界中&#xff0c;MongoDB 作为最流行的 NoSQL 数据库之一&#xff0c;因其灵活的数据模型和强大的扩展能力而广受开发者喜爱。然而&#xff0c;与任何复杂系统一样&#xff0c;在使用 MongoDB 过程中难免会遇到各种错误和性能问题。本文将全面介绍 MongoDB 的…

【C++】stack,queue和priority_queue(优先级队列)

文章目录 前言一、栈&#xff08;stack&#xff09;和队列&#xff08;queue&#xff09;的相关接口1.栈的相关接口2.队列的相关接口 二、栈&#xff08;stack&#xff09;和队列&#xff08;queue&#xff09;的模拟实现1.stack的模拟实现2.queue的模拟实现 三、priority_queu…

ubuntu中上传项目至GitHub仓库教程

一、到github官网注册用户 1.注册用户 地址&#xff1a;https://github.com/ 2.安装Git 打开终端&#xff0c;输入指令git,检查是否已安装Git 如果没有安装就输入指令 sudo apt-get install git 二、上传项目到github 1.创建项目仓库 进入github主页&#xff0c;点击号…

windows 下用yolov5 训练模型 给到opencv 使用

windows 使用yolov5训练模型&#xff0c;之后opencv加载模型进行推理。 一&#xff0c;搭建环境 安装 Anaconda 二&#xff0c;创建虚拟环境并安装yolov5 conda create -n yolov5 python3.9 -y conda activate yolov5 git clone https://github.com/ultralytics/yolov5 cd …

Spark集群架构解析:核心组件与Standalone、YARN模式深度对比(AM,Container,Driver,Executor)

一、核心组件定义与关系拆解 1. ApplicationMaster&#xff08;AM&#xff09; 定义&#xff1a;YARN 框架中的应用管理器&#xff0c;每个应用程序&#xff08;如 Spark 作业&#xff09;对应一个 AM。职责&#xff1a; 向 YARN 的 ResourceManager 申请资源&#xff08;Con…

Linux Kernel调试:强大的printk(二)

前言 如果你对printk的基本用法还不熟悉&#xff0c;请先阅读&#xff1a; Linux Kernel调试&#xff1a;强大的printk&#xff08;一&#xff09; 上一篇Linux Kernel调试&#xff1a;强大的printk&#xff08;一&#xff09;我们介绍了printk的基础知识和基本用法&#xf…

Kafka Kraft模式集群 + ssl

文章目录 启用集群资源规划准备证书创建相关文件夹配置文件启动各Kafka节点 故障转移测试spring boot集成 启用集群 配置集群时关键就是提前梳理好需要的网络资源&#xff0c;完成对应server.properties文件的配置。在执行前先把这些梳理好&#xff0c;可以方便后面的配置&…

[crxjs]自己创建一个浏览器插件

参考官方 https://crxjs.dev/vite-plugin/getting-started/vue/create-project 按照流程操作会失败的原因 是因为跨域的问题, 在此处添加 server: {host: "localhost",port: 5173,cors: true,headers: {"Access-Control-Allow-Origin": "*",}…

类的设计模式——单例、工厂以及建造者模式

1.单例模式 1.1 饿汉模式 单例模式&#xff1a;一个类只能创建一个对象&#xff0c;这个设计模式可以保证系统中该类只有一个实例&#xff0c;并提供一个访问它的全局访问点&#xff0c;该实例被所有程序模块共享。 饿汉模式指在程序初始化时就创建一个唯一的实例对象。适用…

STM32之看门狗(IWDG)

一、看门狗外设的原理与应用 背景说明 随着单片机的发展&#xff0c;单片机在家用电器、工业自动化、生产过程控制、智能仪器仪表等领域的应用越来越广泛。然而处于同一电力系统中的各种电气设备通过电或磁的联系彼此紧密相连&#xff0c;相互影响&#xff0c;由于运行方式的…

跟着华为去变革 ——读《常变与长青》有感

《常变与长青》&#xff0c;是华为郭平总2024年上市的著作。走进这本书&#xff0c;我们能够清晰看到华为30多年的成长过程和伴随期间的变革历程&#xff1a;从一家设备代理商开始&#xff0c;起步蹒跚&#xff0c;砥砺前行&#xff0c;在闯过一个又一个磨难之后&#xff0c;成…

图像分割技术的实现与比较分析

引言 图像分割是计算机视觉领域中的一项基础技术&#xff0c;其目标是将数字图像划分为多个图像子区域&#xff08;像素的集合&#xff09;&#xff0c;以简化图像表示&#xff0c;便于后续分析和理解。在医学影像、遥感图像分析、自动驾驶、工业检测等众多领域&#xff0c;图…