Deno 使用示例

本文介绍如何使用Deno快速部署静态资源服务器,并通过简单的代码实现将POST请求代理到API服务器的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Deno 使用示例

使用 deno 可以 使用 ts 很方便开发服务端应用

安装 deno
使用 powershell 执行 irm https://deno.land/install.ps1 | iex

启动一个静态服务

deno run --allow-net --allow-read https://deno.land/std@0.168.0/http/file_server.ts .

没错,就上面一行代码,执行后就会下载包,并执行,启动一个文件服务器

  • --allow-net 意思是只允许访问网络
  • --allow-read 意思是只允许 读取文件

如果想安装

不想每次都下载?直接安装行就了

run 改为 install ,以后 直接使用 file_server . 就行了

如果想打包成可执行程序

window 下的 exe,直接把 run 改成 compile

如果想…

下面这个示例实现了一下功能:

  1. 静态资源服务器
  2. 代理 POST请求到API服务器

创建下面文件并执行

deno run --allow-all index.ts

  • --allow-all 意思是允许程序使用所有权限

index.ts

import {serveDir, ServeDirOptions} from 'https://deno.land/std@0.160.0/http/file_server.ts'

// POST 地址
const proxy = new URL('http://192.168.1.11:9080/com.kysoft.service');
const root = Deno.cwd() + '/public'
const port = 3000;


const staticOption:ServeDirOptions = {
    fsRoot: root, // 静态根目录
    showDirListing: true, // 显示目录结构
    showDotfiles: true, // 显示 .开头的文件
    urlRoot: '',
    quiet: false // 不打印请求日志
}

// 创建一个监听服务
const server = Deno.listen({port})

// 定义一个响应程序
const serveHttp = async (conn: Deno.Conn) => {
	const httpConn = Deno.serveHttp(conn);
	for await (const {request,respondWith} of httpConn) {
		if(request.method==='POST'){
            // 修改 url
			const url = new URL(request.url);
            url.host = proxy.host;
            url.port = proxy.port;
            url.pathname = proxy.pathname + url.pathname;

            // 请求新地址,输出日志,并返回结果
            respondWith(log(await fetch(url,request)));
		} else {
            const response = await serveDir(
                request,
                staticOption
            );
            respondWith(response)
        }
	}
}

console.log(`服务已启动于: http://localhost:${port}`);

// 循环监听
for await (const conn of server) {
	serveHttp(conn);
}

/* 输出代理日志 */
async function log(response:Response|Promise<Response>):Promise<Response>{
    const res = await Promise.resolve(response);
    console.log(`proxy-fetch: ${res.url}`)
    console.log('proxy-result:',res.statusText)
    return res;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zq.xc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值