服务器软件express搭建web服务器

news2024/11/20 15:47:59

文章目录

  • 1.express 是什么
  • 2.路由
      • 2.1(参数一)读取用户的请求(request)
      • 2.2(参数二)给用户响应(response)
      • 2.3(参数三)next()函数(传递请求到下一个处理函数)
  • 3. use中间件
      • use中间件与路由的区别
        • 路由(区别演示)
        • use中间件(区别演示)

1.express 是什么

  • express 是node中的服务器软件
    通过express可以快速的在node中搭建一个web服务器
    • 使用步骤:
      1. 创建并初始化项目
        yarn init -y
        此命令会生成一个package.jason的包,它是Node.js项目中的关键文件。它包含与项目相关的各种元数据,包括依赖项、脚本和配置详细信息。
      2. 安装express
        yarn add express
      3. 创建index.js 并编写代码

// 引入express
const express = require("express")
// 获取服务器的实例(对象)
const app = express()
// 启动服务器(// app.listen(端口号) 用来启动服务器,里面的回调函数会在服务器启动之后运行)
app.listen(3000, () => {
    console.log("服务器已经启动~")
})

我们通过
http://localhost:3000
或 http://127.0.0.1:3000来访问服务器
在这里插入图片描述

2.路由

如果希望服务器可以正常访问,则需要为服务器设置路由,路由可以根据不同的请求方式和请求地址来处理用户的请求
app.METHOD(…)
METHOD 可以是 get 或 post…
当有人向根目录发送get请求时,回调函数就会执行
路由的回调函数执行时,会接收到三个参数(req,res,next)
第一个 request

在路由中,应该做两件事

2.1(参数一)读取用户的请求(request)

req() 表示的是用户的请求信息,通过req可以获取用户传递数据

console.log(req.url)

2.2(参数二)给用户响应(response)

根据用户的请求返回响应(response)

  • res()表示的服务器发送给客户端的响应信息
    可以通过res来向客户端返回数据
    • sendStatus() 向客户端发送响应状态吗
    • status() 用来设置响应状态吗,但是并不发送
    • send() 设置并发送响应体
res.sendStatus(404)
res.status(200)
res.send("<h1>这是我的第一个服务器</h1>")
// 引入express
const express = require("express")
// 获取服务器的实例(对象)
const app = express()
// 启动服务器(// app.listen(端口号) 用来启动服务器,里面的回调函数会在服务器启动之后运行)
app.listen(3000, () => {
    console.log("服务器已经启动~")
})
app.get("/", (req, res) => {
    // 注意必须用双引号包裹路径
    console.log('有人来了123')
    // 向客户端发送响应状态码,这些都是服务器的回应,意思是回应一次就行
    // req就是读取用户的请求信息
    console.log(req.url)
    // res.sendStatus(404)
    res.status(404)
    res.send('你的请求没问题')

})

2.3(参数三)next()函数(传递请求到下一个处理函数)

浏览器每刷新一下就会发送一次请求,app.get()方法就会再执行一次。
next() 是回调函数的第三个参数,它是一个函数,调用函数后,可以触发后续的中间件/路由
next() 不能在响应处理完毕后调用

// 引入express
const express = require("express")
// 获取服务器的实例(对象)
const app = express()
// 启动服务器(// app.listen(端口号) 用来启动服务器,里面的回调函数会在服务器启动之后运行)

app.listen(3000, () => {
    console.log("服务器已经启动~")
})
app.get("/", (req, res, next) => {
    next()
    // next()要在响应处理之前使用
    res.send("1")

    // send里面必须为字符串
})
app.get("/", (req, res, next) => {
    next()
    // next()要在响应处理之前使用
    res.send("2")
    // send里面必须为字符串
})
app.get("/", (req, res, next) => {
    res.send("3")
    // send里面必须为字符串
})

根据以上代码,服务器返回的应该是1,但是实际上返回的是3。因为调用next()方法之后,本身的路由/use中间件就不会响应数据,自然下一个路由或者是中间件就可以执行了。如果前面两个路由都没有调用next方法,那么服务器给出的响应就是1了,响应1之后,后面的全部路由都不会执行了。
在这里插入图片描述

3. use中间件

app.listen(3000, () => {
    console.log("服务器已经启动~")
})
app.get("/", (req, res, next) => {
    next()
    // next()要在响应处理之前使用
    res.send("1")

    // send里面必须为字符串
})
app.get("/", (req, res, next) => {
    next()
    // next()要在响应处理之前使用
    res.send("2")
    // send里面必须为字符串
})
app.get("/", (req, res, next) => {
    next()
    res.send("3")
    // send里面必须为字符串
})
app.use((req, res, next) => {
    res.send("qwer")
})

服务器响应为qwer
在这里插入图片描述

use中间件与路由的区别

路径区别,路由的话写的什么路径,访问的时候就是什么路径,但是如果是中间件的话,在路径后面还可以任意加东西,都可以访问成功,但是如果是路由的话,随便加东西是访问不成功的。

路由(区别演示)
app.listen(3000, () => {
    console.log("服务器已经启动~")
})
app.get("/hello", (req, res, next) => {
    // next()
    res.send("3")
    // send里面必须为字符串
})

http://localhost:3000/hello可以访问
在这里插入图片描述

接下来改一下路径
http://localhost:3000/hello/poiu
发现不能访问到
在这里插入图片描述

use中间件(区别演示)

在这里插入图片描述
注意看地址栏,无论我在/hello后面加什么都可以访问到,这就是use与路由的区别

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

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

相关文章

卡尔曼滤波跟踪自由落体的高度程序,带MATLAB例程

背景 已知一物体做自由落体运动,对其高度进行20次测量,测量值如下表:(g=9.80m/s2). 设高度的测量误差分布为: N(0, 1),该物体的初始高度h0和速度v0分布也为高斯分布,且: 试求该物体高度和速度的随时间变化的最优估计(matlab Kalman filters)。N(0, 1),该物体的初始高…

【QT入门】 Qt实现自定义信号

往期回顾&#xff1a; 【QT入门】图片查看软件(优化)-CSDN博客 【QT入门】 lambda表达式(函数)详解-CSDN博客 【QT入门】 Qt槽函数五种常用写法介绍-CSDN博客 【QT入门】 Qt实现自定义信号 一、为什么需要自定义信号 比如说现在一个小需求&#xff0c;我们想要实现跨ui通信&a…

计算机实体安全

计算机实体安全定义&#xff1a; 对场地环境、设施、设备和载体、人员采取的安全对策和措施。 一、计算机可靠性与故障分析 1.1 计算机的可靠性 可靠性 (狭义) ■计算机在规定时间与条件下完成规定功能的 概率 ■规定条件&#xff1a;环境条件&#xff0c;使用条件&#xff0…

计数质数——算法思路

题目链接&#xff1a;204. 计数质数 - 力扣&#xff08;LeetCode&#xff09; 会超时的代码&#xff1a; 使用了枚举的方法 方法一&#xff1a; public static int countPrimes(int n) {int ans1;if (n<2)return 0;for (int i3;i<n;i){boolean flagtrue;for (int j2;j&…

docker安装WireGuard服务

启动 WireGuard 如下异常 则是linux内核需要升级 $ wg-quick down wg0 $ wg-quick up wg0 Error: WireGuard exited with the error: Cannot find device "wg0" This usually means that your hosts kernel does not support WireGuard!at /app/lib/WireGuard.js:65…

【计算机毕业设计】基于ssm038框架的网上招聘系统的设计与实现lw7

基于ssm038框架的网上招聘系统的设计与实现lw7&#xff1a; 本课题是基于ssm框架&#xff08;springMVC,spring,mybatis)的招聘系统&#xff0c;是标准的MVC模式&#xff0c;将系统分为表现层、controller层、service层、DAO层四层&#xff0c;使用spring MVC负责请求的转发和视…

【Linux】从零认识进程 — 中下篇

送给大家一句话&#xff1a; 人一切的痛苦&#xff0c;本质上都是对自己无能的愤怒。而自律&#xff0c;恰恰是解决人生痛苦的根本途径。—— 王小波 从零认识进程 1 进程优先级1.1 什么是优先级1.2 为什么要有优先级1.3 Linux优先级的特点 && 查看方式1.4 其他概念 2…

【C语言】编译和链接----从源代码到可执行程序的转换【图文详解】

欢迎来CILMY23的博客喔&#xff0c;本篇为【C语言】文件操作揭秘&#xff1a;C语言中文件的顺序读写、随机读写、判断文件结束和文件缓冲区详细解析【图文详解】&#xff0c;感谢观看&#xff0c;支持的可以给个一键三连&#xff0c;点赞关注收藏。 前言 欢迎来到本篇博客&…

写作兔怎么用 #微信#其他#知识分享

写作兔是一款非常实用的论文写作工具&#xff0c;不仅具有查重和降重的功能&#xff0c;而且操作简单方便&#xff0c;使用起来非常便捷。那么&#xff0c;接下来就让我们一起来了解一下“写作兔怎么用”。 首先&#xff0c;要使用写作兔&#xff0c;你只需要在浏览器中输入写作…

背包dp模板

01背包 for (int i1; i<n; i) //物品 {for (int j1; j<V; j) //容积 { // 装得下 分为 1.装 2.不装if (j>v[i]) dp[j] max(tmp[j],tmp[j-v[i]]v[i]);else dp[j] tmp[j]; // 装不下第i个}for (int j1; j<V; j) tmp[j] dp[j]; //滚动数组 } 滚动数组 for (int …

网络安全知识核心之TCP与UDP区别

TCP 面向连接&#xff08;如打电话要先拨号建立连接&#xff09;提供可靠的服务;UDP 是无连接的&#xff0c;即发送数据之前不需要建立连接&#xff0c;;UDP 尽最大努力交付&#xff0c;即不保证可靠交付。&#xff08;由于 UDP 无需建立连接&#xff0c;因此 UDP 不会引入建立…

【漏洞复现】科立讯通信指挥调度平台editemedia.php sql注入漏洞

漏洞描述 在20240318之前的福建科立讯通信指挥调度平台中发现了一个漏洞。该漏洞被归类为关键级别,影响文件/api/client/editemedia.php的未知部分。通过操纵参数number/enterprise_uuid可导致SQL注入。攻击可能会远程发起。 免责声明 技术文章仅供参考,任何个人和组织使…

2024年全球生成人工智能全景图【中文】

2024年全球生成人工智能全景图【中文】 在过去的一年中&#xff0c;产生式人工智能&#xff08;GenAI&#xff09;无疑成为了全球各行各业的热门话题。特别是ChatGPT的发布&#xff0c;激发了公众对GenAI强烈的兴趣和激动&#xff0c;唤醒了我们对其变革潜力的认知。 虽然我们…

算法系列--动态规划--回文子串系列

&#x1f495;"我们好像在池塘的水底&#xff0c;从一个月亮走向另一个月亮。。"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;算法系列–动态规划–回文子串系列 今天为大家带来的是算法系列--动态规划--回文子串系列(1),本文重点掌握如何快速判…

树,二叉树与堆

这里写目录标题 树树的概念树的相关概念树的表示 二叉树二叉树的概念满二叉树与完全二叉树二叉树的重要性质二叉树的存储结构 堆二叉树的顺序存储堆的概念堆的实现堆插入和删除数据 树 树的概念 树的概念&#xff1a; 树是一种非线性的数据结构&#xff0c;它是由n&#xff08…

链表oj测试题(上)

链表的申明&#xff1a; struct ListNode {int val;struct ListNode* next; }; 1.题1 删除指定元素 例如&#xff1a;链表1 2 6 3 4 5 6&#xff0c;然后选择删除元素6&#xff0c;返回的链表为1 2 3 4 5 。 代码演示&#xff1a; typedef struct ListNode ListNode;List…

01-java面试题八股文-----java基础——20题

文章目录 <font color"red">1、java语言有哪些特点&#xff1a;<font color"red">2、面向对象和面向过程的区别<font color"red">3、标识符的命名规则。<font color"red">4、八种基本数据类型的大小&#xff…

Elastic 线下 Meetup 将于 2024 年 3 月 30 号在武汉举办

2024 Elastic Meetup 武汉站活动&#xff0c;由 Elastic、腾讯、新智锦绣联合举办&#xff0c;现诚邀广大技术爱好者及开发者参加。 活动时间 2024年3月30日 13:30-18:00 活动地点 中国武汉 武汉市江夏区腾讯大道1号腾讯武汉研发中心一楼多功能厅 13:30-14:00 入场 活动流程…

关于调度算法,小林给出更好的例子(银行办理业务)

看的迷迷糊糊&#xff1f;那我拿去银行办业务的例子&#xff0c;把上面的调度算法串起来&#xff0c;你还不懂&#xff0c;你锤我&#xff01; 办理业务的客户相当于进程&#xff0c;银行窗口工作人员相当于 CPU。 现在&#xff0c;假设这个银行只有一个窗口&#xff08;单核 …

Prometheus Grafana 配置仪表板

#grafana# 其实grafana提供了丰富的Prometheus数据源的仪表板&#xff0c;基本上主流的都有&#xff0c;通过下面官方地址可查阅 Dashboards | Grafana Labs 这里举例说明&#xff0c;配置node_exporter仪表板 首先&#xff0c;在上面的网站搜索 node 可以查到蛮多的仪表板…