TypeScript实战教程(一):表单上传与后端处理

TypeScript实战教程(一):表单上传与后端处理

文章目录

  • TypeScript实战教程(一):表单上传与后端处理
  • 一、前言
    • 1、TypeScript介绍
    • 2、TypeScript的关键特性包括:
    • 3、使用场景
    • 4、编译过程
  • 二、环境配置
    • 1、配置清单
  • 三、具体步骤
    • 1、前端表单
    • 2、TypeScript服务端 (server.ts):
      • (1)yarn项目初始化
      • (2)项目依赖安装
      • (3)server.ts代码
      • (4)项目启动指令配置
  • 四、程序运行
    • 1、启动指令
    • 2、项目测试

一、前言

  目前国内的TypeScript相关的实战类教程,比较少,记录一下个人跑通表单上传与后端处理的程序,流程。

1、TypeScript介绍

  TypeScript是一种由Microsoft开发和维护的开源编程语言。它是JavaScript的一个超集,意味着它扩展了JavaScript的语法,并添加了新的特性,尤其是静态类型系统。这使得开发者可以在代码编写阶段捕捉到潜在的错误,并提供更好的工具支持,如代码自动完成和重构。

2、TypeScript的关键特性包括:

  1. 静态类型检查:TypeScript的核心特性之一是其静态类型系统。通过在代码中添加类型注解,开发者可以明确每个变量和表达式的类型。这有助于在编译时而非运行时捕捉错误。

  2. 类型推断:TypeScript能够在没有明确类型注解的情况下推断变量的类型,这减少了需要手动添加类型注解的情况。

  3. 类和接口:TypeScript提供了类和接口的实现,这对于使用面向对象编程范式的开发者来说非常熟悉和有用。

  4. 枚举类型:TypeScript添加了枚举(Enums),这是JavaScript中没有的一种特性,它允许开发者定义一组命名常量。

  5. 泛型:TypeScript的泛型允许开发者编写可重用的、与类型无关的组件,同时保持类型安全。

  6. 模块化:TypeScript支持ES6的模块化特性,允许开发者组织和重用代码。

  7. 工具支持:TypeScript由于其类型系统,使得编辑器和IDE能够提供更高级的代码自动完成、导航和重构功能。

  8. 与现有JavaScript库的兼容性:TypeScript与JavaScript高度兼容,意味着你可以在TypeScript项目中直接使用JavaScript代码和库。

  9. 装饰器:TypeScript提供了装饰器,这是一种为类和类成员添加注解和元编程语法的高级特性。

3、使用场景

  TypeScript非常适合大型项目和团队,因为它的类型系统有助于代码的维护和管理。它在前端框架(如Angular、React和Vue.js)中也非常流行,这些框架的许多代码库都是用TypeScript编写的。此外,它也适用于Node.js后端开发。

4、编译过程

  TypeScript代码在运行之前需要被编译成JavaScript,因为浏览器和Node.js默认不支持TypeScript。这个编译过程通常通过TypeScript编译器(tsc)或通过构建工具(如Webpack)中的TypeScript加载器完成。

总的来说,TypeScript结合了JavaScript的灵活性和静态类型语言的强大功能,提供了一个适合开发大型应用程序的平台,同时也让开发者能够更加高效和安全地编写JavaScript代码。

二、环境配置

1、配置清单

代码编辑器:Visual Studio Code(VSCode)是一个由Microsoft开发的免费、开源的代码编辑器。
前端语言运行环境:Node.js是一个开源的、跨平台的JavaScript运行时环境

以上二个,要在做前,提前安装好

三、具体步骤

首先,我们创建一个简单的HTML表单,包含账户和密码输入框以及一个提交按钮。
然后,我们将使用TypeScript编写一个简单的服务端应用程序,使用Node.js和Express框架来处理表单数据,并返回“登录成功”的消息。

1、前端表单

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Login Form</title>
</head>
<body>
    <h1>
        账户登录测试
    </h1>
    <form id="loginForm">

        <label name="username">账户:</label>
        <input type="text" name="username" required>
        <br>
        <label name="password">密码:</label>
        <input type="password" name="password" required>
        <br>
        <input type="submit" value="Login">
    </form>
    
    
    <script>
    // 获取表单元素
    const loginForm = document.getElementById('loginForm');
    
    // 监听表单的提交事件
    loginForm.addEventListener('submit', function(event) {
        // 阻止表单的默认提交行为
        event.preventDefault();
        // 创建一个FormData对象,使用表单中的数据
        const formData = new FormData(loginForm);
    
        // 使用fetch API发送数据到服务端
        fetch('http://127.0.0.1:3000/loginPre', {
            method: 'POST',
            body: formData
        })
        .then(response => response.text()) // 或者 response.json() 如果服务端返回JSON
        .then(text => {
            // 使用alert显示服务端的响应
            alert(text);
        })
        .catch(error => {
            // 处理错误
            console.error('Error:', error);
            alert('登录请求失败'+error);
        });
    });

    </script>
</body>
</html>

2、TypeScript服务端 (server.ts):

在开始之前,请确保你已经安装了Node.js和npm。

node -v
npm -v

确保上面两个指令都有输出

(1)yarn项目初始化

Yarn介绍:yarn 现代的包管理工具 介绍
使用npm安装了现代的包管理器Yarn

 npm install -g yarn

yarn项目初始化

yarn init -y

在这里插入图片描述
目前文件结构如上,只有两个文件

(2)项目依赖安装

可以使用 yarn add 命令来添加生产依赖项,以及 yarn add --dev 来添加开发依赖项。

生产依赖项

yarn add express body-parser multer parcel concurrently cors

在这里插入图片描述

开发依赖项(TypeScript 类型定义和 TypeScript 本身)

yarn add --dev @types/express @types/body-parser typescript

在这里插入图片描述

运行完后,yarn自动将依赖项添加到parkage,json中,可以在这里看到你安装了哪些依赖项。

在这里插入图片描述
至此项目的依赖项就配置完毕了

有些依赖项,可能大家一开始不清楚安装是为了干嘛,我简单介绍一下各个依赖项的作用

生产依赖项作用
expressExpress 是一个灵活的 Node.js web 应用框架,提供了一系列强大的功能来帮助创建各种 Web 应用和 API。它是最流行的 Node.js 框架之一,因为它简单、可扩展、并且有大量的中间件可以支持复杂的应用需求。
body-parser这是一个中间件,用于处理 JSON, Raw, Text 和 URL 编码的数据。
multerMulter 是一个用于处理 multipart/form-data 类型的数据的中间件,也就是处理表单的中间件
corsCORS(Cross-Origin Resource Sharing)是一个中间件,用于启用 CORS,允许在浏览器中执行跨源请求。这是安全的一部分,因为它允许你明确哪些源可以访问你的资源。在构建 API 时,如果你想让前端应用能够从不同的域名(源)访问后端服务,你需要使用 CORS。
parcelParcel 是一个 Web 应用程序打包器,它提供了快速、零配置的体验。它可以自动转换资源,如 TypeScript, SCSS, JSX 等,并且提供了一个开发服务器,支持热模块替换(HMR)。
concurrently这是一个命令行工具,允许同时运行多个命令。在开发中,这特别有用,因为你可以同时启动服务端和客户端服务器,或者同时运行多个任务,而不必打开多个终端窗口。
开发依赖项作用
@types/express这是Express框架的类型定义文件。当你在TypeScript项目中使用Express时,这个类型定义包提供了所有Express API的类型注解,这样你就可以享受到自动完成、类型检查和文档查看等TypeScript的优势。
@types/body-parser类似于@types/express,这是body-parser库的类型定义文件。它为body-parser库提供了TypeScript类型声明,使得在TypeScript项目中使用body-parser时,可以有更好的开发体验
typescriptTypeScript是JavaScript的一个超集,它添加了类型系统和编译时的类型检查。它可以编译成纯JavaScript,因此可以在任何支持JavaScript的平台上运行。

安装这些开发依赖项允许你在使用TypeScript开发Node.js应用时,利用类型系统来提升代码质量和开发效率。开发依赖项通常只在开发过程中使用,不会包含在最终的产品中。

(3)server.ts代码

下面是server.ts的代码的具体内容

import express from 'express';
import bodyParser from 'body-parser';

// 创建Express应用
const app = express();
const port = 3000; // 服务器端口


// 使用CORS中间件允许跨域请求
const cors = require('cors');
app.use(cors());

// 配置body-parser中间件来解析JSON和urlencoded数据
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

// 静态文件服务,用于提供HTML表单文件
app.use(express.static('public'));


// multer 是一个用于处理 multipart/form-data 的中间件
const multer = require('multer');
const upload = multer().none();
// 设置登录端点
app.post('/loginPre',upload, (req, res) => {
  // 获取用户名和密码
      // 在实际应用中,你会在这里添加验证逻辑
  
  const { username, password } = req.body;

  // 这里应该有一些验证逻辑,比如查询数据库验证用户名和密码
  // 为了演示,我们假设任何用户都是有效的,并返回一个简单的消息
  if (username && password) {
      // 登录成功
      res.send('登录成功!'+'账户:'+username+'密码'+password);
  } else {
      // 登录失败
      res.status(400).send('登录失败:需要用户名和密码');
  }
});


// 启动服务器
app.listen(port, () => {
    console.log(`服务器运行在 http://localhost:${port}`);
});

(4)项目启动指令配置

打开package.json
在这里插入图片描述
在依赖项下面加入,以下启动代码

  "scripts": {
    "dev:frontend": "parcel index.html",
    "dev:backend": "ts-node ./server.ts",
    "dev": "concurrently \"yarn dev:frontend\" \"yarn dev:backend\""
  }

四、程序运行

1、启动指令

yarn dev

在这里插入图片描述

2、项目测试

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

张维迎《博弈与社会》多重均衡与制度和文化(1)多重均衡问题

什么是多重均衡 我曾经在课堂上做过这样一个实验&#xff1a;随机选择男女两位同学参加一个选数字的游戏。游戏的基本规则为&#xff1a;每一个同学随机地从1到10十个数字中任意选择5个。如果两人选择的数字没有任何重复的话&#xff0c;则每人可以得到50元&#xff1b;如果两人…

不同核函数高斯过程回归算法与不同因子输入情况下对长江流域蒸散发量应用研究_杨梓涵_2023

不同核函数高斯过程回归算法与不同因子输入情况下对长江流域蒸散发量应用研究_杨梓涵_2023 摘要关键词 0 引言1 材料与方法1.1 数据资料1.2 参考作物腾发量( ET0 ) 计算方法1.2.1 FAO&#xff0d;56 Penman&#xff0d;Monteith 模型1.2.2 Hargreaves&#xff0d;Samani 模型1.…

apisix多节点搭建

文章目录 前言一、介绍1. 端口介绍2. APISIX节点介绍3. apisix单机安装配置教程(选看) 二、准备1. 配置集群免密登录2. 搭建etcd集群 三、安装apisix节点1. 复制脚本2. 增加执行权限3. 分发脚本4. 执行脚本5. 配置apisix的etcd集群地址 四、安装apisix-dashboard1. 复制脚本2. …

【GEE】基于GEE批量下载Landsat8 L1C数据(整幅)

之前发过一篇使用GEE下载Landsat8的文章&#xff0c;然后有很多小伙伴私信我各种问题&#xff0c;如L1C、L2数据代码怎么修改&#xff0c;如何镶嵌&#xff0c;如何去云、 如何裁剪等一系列问题。正好快过年了&#xff0c;手头的事也没有多少了&#xff0c;所以这两天整理了一下…

蜂邮EDM邮件营销平台,低至0.0041元每封!

推荐的邮件营销平台有哪些&#xff1f;邮件营销平台如何使用&#xff1f; 你是否厌倦了传统的推广方式&#xff1f;是时候尝试一种全新的、高效的传播方式了&#xff01;蜂邮EDM邮件营销平台正在掀起一场数字化风潮&#xff0c;每封邮件仅需0.0041元&#xff0c;让你的推广成本…

5款超级好用的桌面端软件推荐

​ 今天我想分享一些自己比较喜欢的桌面端软件&#xff0c;还请大家包涵指正。如果你曾搜索过 Windows效率工具推荐&#xff0c;对下文的软件或许有所了解。不过为了凑字数&#xff0c;我还是会再介绍一遍。 1.电子书阅读——Starrea ​ Starrea是一款轻量、易用而又全功能的…

C#/.NET/.NET Core优秀项目和框架2024年1月简报

前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架&#xff08;每周至少会推荐两个优秀的项目和框架当然节假日除外&#xff09;&#xff0c;公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等&#xff08;打不开或者打开GitHub很慢的同学…

[Python-闫式DP]

闫式DP分析法 闫老师是将DP问题归结为了有限集合中的最值问题。 动态规划有两个阶段&#xff0c;一是状态表示&#xff0c;二是状态计算。 状态表示 f(i,j) 状态表示是一个化零为整的过程&#xff0c;动态规划的做题思路不是暴力法的每一个物品都去枚举&#xff0c;而是将相…

异步解耦之RabbitMQ(二)__RabbitMQ架构及交换机

异步解耦之RabbitMQ(一) RabbitMQ架构 RabbitMQ是一个基于AMQP&#xff08;Advanced Message Queuing Protocol&#xff09;协议的消息代理中间件&#xff0c;它通过交换机和队列实现消息的路由和分发。以下是RabbitMQ的架构图&#xff1a; Producer&#xff08;生产者&#…

Java设计模式-组合模式(13)

大家好,我是馆长!今天开始我们讲的是结构型模式中的组合模式。老规矩,讲解之前再次熟悉下结构型模式包含:代理模式、适配器模式、桥接模式、装饰器模式、外观模式、享元模式、组合模式,共7种设计模式。 组合模式(Composite Pattern) 定义 组合(Composite)模式:又叫…

深度学习与神经网络Pytorch版 3.2 线性回归从零开始实现 1.生成数据集

3.2 线性回归从零开始实现 目录 3.2 线性回归从零开始实现 一 &#xff0c;简介 1. 原理 2. 步骤 3. 优缺点 4. 应用场景 二 &#xff0c;代码展现 1. 生成数据集(完整代码) 2. 各个函数解析 2.1 torch.normal()函数 2.2 torch.matmul()函数 2.3 d2l.plt.scatter(…

【教学类-44-54】20240201 德彪钢笔行书(实线字体)制作的数字描字帖

作品展示 背景需求&#xff1a; 找到了两款适合做数字描字贴的字体 【教学类-44-03】20240111阿拉伯数字字帖的字体&#xff08;三&#xff09;——德彪钢笔行书&#xff08;实线字体&#xff09;和print dashed&#xff08;虚线字体&#xff09;-CSDN博客文章浏览阅读1.1k次…

【HarmonyOS】鸿蒙开发之HTTP网络请求——第5章

HTTP网络请求封装 network/request.ets import { configInterface } from ./type import http from ohos.net.http import { getToken } from ../utils/storage//网络请求封装 export const request (config:configInterface)>{let httpRequest:http.HttpRequest http.c…

༺༽༾ཊ—Unity之-01-工厂方法模式—ཏ༿༼༻

首先创建一个项目&#xff0c; 在这个初始界面我们需要做一些准备工作&#xff0c; 建基础通用文件夹&#xff0c; 创建一个Plane 重置后 缩放100倍 加一个颜色&#xff0c; 任务&#xff1a;使用工厂方法模式 创建 飞船模型&#xff0c; 首先资源商店下载飞船模型&#xff0c…

二进制安全虚拟机Protostar靶场(5)堆的简单介绍以及实战 heap0

前言 这是一个系列文章&#xff0c;之前已经介绍过一些二进制安全的基础知识&#xff0c;这里就不过多重复提及&#xff0c;不熟悉的同学可以去看看我之前写的文章 什么是堆 堆是动态内存分配的区域&#xff0c;程序在运行时用来分配内存。它与栈不同&#xff0c;栈用于静态…

【Vue3+Vite】Vue3视图渲染技术 快速学习 第二期

文章目录 一、模版语法1.1 插值表达式和文本渲染1.1.1 插值表达式 语法1.1.2 文本渲染 语法 1.2 Attribute属性渲染1.3 事件的绑定 二、响应式基础2.1 响应式需求案例2.2 响应式实现关键字ref2.3 响应式实现关键字reactive2.4 扩展响应式关键字toRefs 和 toRef 三、条件和列表渲…

农业植保无人机行业研究:预计2025年市场规模可达115亿元

农业植保无人机行业市场投资前景现状如何?农业植保无人机市场&#xff0c;包括无人机自身技术、性能标准和植保标准。农业植保无人机应用植保机喷洒农药对我国而言&#xff0c;不仅具有很大的经济价值&#xff0c;还具有社会价值&#xff1a;农业植保机作业不仅有超高的工作效…

并网逆变器学习笔记8---平衡桥(独立中线模块)控制

参考文献&#xff1a;《带独立中线模块的三相四线制逆变器中线电压脉动抑制方法》---赵文心 一、独立中线模块的三相四线拓扑 独立中线模块是控制中线电压恒为母线一半&#xff0c;同时为零序电流ineu提供通路。不平衡负载的零序电流会导致中线电压脉动&#xff0c;因此需要控制…

【Android 字节码插桩】Gradle插件基础 Transform API的使用

前言 啪~我给大家开个会&#xff08;手机扔桌子上&#xff09; 什么叫做 客户无感的数据脱敏&#xff01;&#xff1f; 师爷给翻译翻译什么叫做客户无感的数据脱敏&#xff1f; 什么特么的叫做客户无感数据脱敏&#xff1f; 举个栗子~ 客户端Sdk新升级了一个版本&#xff0c;增…

UnityShader(九)Unity中的基础光照(下)

目录 标准光照模型 自发光 高光反射 &#xff08;1&#xff09;Phong模型 &#xff08;2&#xff09;Blinn模型 漫反射 环境光 逐顶点还是逐像素 逐像素光照 逐顶点光照 总结 标准光照模型 光照模型有许多种&#xff0c;但在早期游戏引擎中&#xff0c;往往只使用一…