使用Deno进行现代Web开发

💓 博客主页:瑕疵的CSDN主页
📝 Gitee主页:瑕疵的gitee主页
⏩ 文章专栏:《热点资讯》
@[TOC]

引言

Deno 是一个现代的、安全的、基于 V8 引擎的 JavaScript 和 TypeScript 运行时,由 Node.js 的作者 Ryan Dahl 创建。Deno 设计之初就考虑到了安全性、易用性和现代开发需求。本文将详细介绍如何使用 Deno 进行现代 Web 开发,包括安装、配置、编写基本应用、使用标准库和第三方模块等内容。

Deno 简介

Deno 是一个全新的 JavaScript 和 TypeScript 运行时,旨在解决 Node.js 存在的一些问题。Deno 的主要特点包括:

  • 安全性:默认禁止文件系统、网络和环境访问,需要显式授权。
  • 内置支持 TypeScript:无需额外配置即可直接运行 TypeScript 代码。
  • 标准库:提供丰富的标准库,涵盖常见的开发需求。
  • 模块化:使用 ES 模块系统,支持远程模块。
  • CLI 工具:提供强大的命令行工具,支持代码格式化、测试和依赖管理。

安装 Deno

在使用 Deno 之前,需要安装 Deno。Deno 提供了多种安装方式,这里以 macOS 为例:

# 使用 Homebrew 安装
brew install deno# 或者使用 curl 安装
curl -fsSL https://deno.land/x/install/install.sh | sh

创建基本应用

在项目根目录下创建一个 main.ts 文件,编写一个简单的 HTTP 服务器:

// main.ts
import { serve } from "https://deno.land/std@0.131.0/http/server.ts";console.log("Starting server on http://localhost:8000");const handler = (req: Request): Response => {return new Response("Hello, Deno!", { status: 200 });
};serve(handler);

运行应用

使用以下命令运行应用:

deno run --allow-net main.ts

这将启动一个监听 8000 端口的 HTTP 服务器。

使用标准库

Deno 提供了丰富的标准库,涵盖了文件系统操作、HTTP 服务、加密等常见需求。例如,读取文件内容:

// read-file.ts
import { readTextFile } from "https://deno.land/std@0.131.0/fs/read_file.ts";async function readFile() {const content = await readTextFile("./example.txt");console.log(content);
}readFile().catch(console.error);

运行上述脚本:

deno run --allow-read read-file.ts

使用第三方模块

Deno 支持从远程 URL 导入第三方模块。例如,使用 oak 框架创建一个更复杂的 HTTP 服务器:

// oak-server.ts
import { Application, Router } from "https://deno.land/x/oak/mod.ts";const app = new Application();
const router = new Router();router.get("/", (ctx) => {ctx.response.body = "Hello, Oak!";}).get("/about", (ctx) => {ctx.response.body = "About page";});app.use(router.routes());
app.use(router.allowedMethods());console.log("Starting server on http://localhost:8000");
await app.listen({ port: 8000 });

运行上述脚本:

deno run --allow-net oak-server.ts

代码格式化和 linting

Deno 提供了内置的代码格式化和 linting 工具。例如,格式化代码:

deno fmt

运行 lint 检查:

deno lint

测试

Deno 支持编写和运行测试用例。例如,编写一个简单的测试:

// sum.test.ts
import { assertEquals } from "https://deno.land/std@0.131.0/testing/asserts.ts";function sum(a: number, b: number): number {return a + b;
}Deno.test("sum should add two numbers", () => {assertEquals(sum(1, 2), 3);
});

运行测试:

deno test

实际案例

Deno 已经被广泛应用于各种现代 Web 开发场景,例如:

  • API 服务:构建高性能的 API 服务,处理大量请求。
  • Web 应用:构建全栈 Web 应用,前后端使用相同的语言和技术栈。
  • CLI 工具:开发命令行工具,提供丰富的功能和良好的用户体验。

总结

通过本文,你已经学会了如何使用 Deno 进行现代 Web 开发。Deno 的安全性、易用性和现代特性使其成为现代 Web 开发的理想选择。
Deno 架构图

Deno 支持 ES 模块系统和远程模块,可以更好地管理和组织代码。
Deno 代码格式化示意图

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

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

相关文章

C++设计模式结构型模式———适配器模式

文章目录 一、引言二、适配器模式三、类适配器四、总结 一、引言 适配器模式是一种结构型设计模式,它在日常生活中有着广泛的应用,比如各种转换接头和电源适配器,它们的主要作用是解决接口不兼容的问题。就像使用电源适配器将220V的市电转换…

交换机如何实现2.5G网络传输速率和网络变压器有关吗

华强盛电子导读:I19926430038 交换机实现2.5G网络传输速率涉及多个因素,其中包括硬件设计、端口支持、传输介质以及网络协议等。网络变压器在其中扮演了一个重要的角色,但并不是唯一的因素。 1. **硬件设计**:交换机需要有支持2.…

Centos环境下安装docker

本文演示离线版安装用于没有网络环境的系统 在线版安装可参考以下链接 https://www.runoob.com/docker/centos-docker-install.html 一、docker离线安装 1、下载docker离线安装包 docker下载地址: Docker版本下载 选择版本 下载后上传至服务器 百度网盘下载…

微软官方 .NET 混淆软件 Dotfuscator

微软官方 .NET 混淆软件 Dotfuscator 1、前言2、Dotfuscator 特色2.1、强大的保护2.2、不需要顾问2.3、世界一流的支持2.4、广泛的平台支持 3、Dotfuscator 功能介绍3.1、.NET Obfuscator3.2、篡改防御和提示3.3、监控性能和使用情况3.4、Silverpght XAML Obfuscatio3.5、WPF B…

深入浅出:SM4 加密算法及其多种工作模式详解

深入浅出:SM4 加密算法及其多种工作模式详解 引言 SM4 是中国国家密码管理局定义的对称分组加密算法,广泛应用于无线局域网安全协议等领域。作为中国商用密码算法之一,SM4 采用 128 位的分组长度和密钥长度,提供了高效且安全的加…

摄像机实时接入分析平台LiteAIServer视频智能分析软件诊断噪声检测

在科技日新月异的今天,视频监控系统的应用日益广泛,从公共安全到家庭防护,从生产线管理到交通监控,视频监控已经成为现代社会不可或缺的一部分。然而,噪声问题一直是影响视频画面清晰度和可用性的关键因素。为了解决这…

NumPy安装

1.NumPy简介 NumPy(Numerical Python) 是 Python 语言的扩展程序库,支持大量维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。 NumPy 的前身 Numeric 最早由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliph…

推荐几款TOP级AI驱动的单元测试工具

这篇文章,我想对开发人员人员来说更有帮助,毕竟开发同学“苦单元测试久已”! 软件开发是一项创造性的工作,但其中也包含着许多乏味的任务。其中最乏味的莫过于编写“单元测试”了,用于验证软件组件是否按预期工作。单…

C#的Event事件示例小白级剖析

1、委托Delegate 首先说一下delegate委托,委托是将方法作为参数进行传递。 // 定义了一个委托类型public delegate void MyDelegate(int num);// 定义了一个啥也不干的委托实例public MyDelegate m_delegate _ > {};// 定义了一个和委托相同格式的方法public …

JWT-混淆算法

jwt - RS256(RSA SHA-256) 题目来源:DownUnderCTF2021 Web jwt 外国的比赛,找不到线上的环境了,github中有Docker,拖下来用docker生成一个本地环境 原题wp链接: https://ctftime.org/write…

物联网开发教程专栏介绍与专栏说明——列表目录查阅(持续更新)

阿齐Archie《物联网开发:完整实现单片机通信模组云服务器智能应用软件》专栏 为方便查阅学习本专栏,特整理专栏介绍与专栏说明 一、专栏介绍 物联网开发教程专栏目前有P1和P2系列,P1系列为《手把手完整实现STM32ESP8266MQTT阿里云APP应用》…

Matlab实现海洋捕食者优化算法(MPA)求解路径规划问题

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1内容介绍 海洋捕食者优化算法(MPA)是一种基于自然界海洋生物捕食行为的优化算法,它通过模拟海洋捕食者如鲨鱼、海豚等在寻找猎物时的群体协作和个体行为来探索最优解。MPA因其出色的全局…

数据结构(8.5_1)——归并排序

定义 归并:把两个或多个已经有序的序列合并成一个 归并后: 2路归并 把两个或多个已经有序的序列合并成一个 m路归并 m路归并,每选出一个元素需要对比关键字m-1次 归并排序(手算) 代码实现 算法效率分析 2路归并的“归并树”——形态上…

软件开发详解:基于食堂采购系统源码开发现代化供应链管理平台实战

下文,小编将从食堂采购系统源码切入,为大家详细解答如何开发现代化供应链管理平台。 一、供应链管理平台的功能需求 供应链管理平台的设计,需要满足企业从原料采购到成品交付的完整业务流程。以下是基于食堂采购系统源码开发的供应链管理平…

【99.9%解决】vue3+vite+typescript+vscode使用@alias路径别名配置不正确导致红色波浪线的解决办法

相信很多人设置了别名“”后在编辑器内产生了大量的红色波浪线,警告无法读取相关模块。网上针对这个问题都没有好好分析原因,并且提供真正理解之下的解决方案。我在历经各种失败后,总结出这篇文章,希望对大家有所帮助。 当然我因为…

「Mac畅玩鸿蒙与硬件18」鸿蒙UI组件篇8 - 高级动画效果与缓动控制

高级动画可以显著提升用户体验,为应用界面带来更流畅的视觉效果。本篇将深入介绍鸿蒙框架的高级动画,包括弹性动画、透明度渐变和旋转缩放组合动画等示例。 关键词 高级动画弹性缓动自动动画缓动曲线 一、Animation 组件的高级缓动曲线 缓动曲线&#…

BFS解决拓扑排序(3)_火星词典

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 BFS解决拓扑排序(3)_火星词典 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论💌 目录…

QT中使用图表之QChart绘制X轴为日期时间轴的折线图

显然X轴是日期时间轴的话,那么我们使用的轴类就得是QDateTimeAxis QChart中日期时间轴的精度是毫秒 因此图表里面的数据的x值需要是一个毫秒数,才能显示出来 --------------------------------------------------------------------------------------…

C++现代教程七之模块

优点 编译时间减少:模块消除了重复解析和编译头文件的需要,从而显著减少了编译时间。特别是在大型项目中,这一点尤为重要。更好的封装性:模块允许更严格的封装,可以明确地控制哪些符号对外可见。这有助于减少命名冲突和…

ML 系列:第 18 部 - 高级概率论:条件概率、随机变量和概率分布

文章目录 一、说明二、关于条件概率2.1 为什么我们说条件概率?2.2 为什么条件概率在统计学中很重要 三、 随机变量的定义3.1 定义3.2 条件概率中的随机变量 四、概率分布的定义五、结论 一、说明 条件概率是极其重要的概率概念,它是因果关系的数学表述&…