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
如果想…
下面这个示例实现了一下功能:
- 静态资源服务器
- 代理 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;
}