deno如何连接mysql_Deno入门教程 (看不懂打死我)

为什么选择Deno

对我来说以下两点很吸引我

默认支持ts、tsx

默认安全,对权限的把控

文档传送门:

安装

Shell (Mac, Linux):

curl -fsSL https://deno.land/x/install/install.sh | sh

复制代码

PowerShell (Windows):

iwr https://deno.land/x/install/install.ps1 -useb | iex

复制代码

Homebrew (Mac):

brew install deno

复制代码

Chocolatey (Windows):

choco install deno

复制代码

Scoop (Windows):

scoop install deno

复制代码

Build and install from source using Cargo

cargo install deno

复制代码

网速比较慢的可以用中文镜像来安装

curl -fsSL https://x.deno.js.cn/install.sh | sh

复制代码

入门

import { serve } from "https://deno.land/std@0.59.0/http/server.ts";

const s = serve({ port: 8000 });

console.log("http://localhost:8000/");

for await (const req of s) {

req.respond({ body: "Hello World\n" });

}

复制代码

这里用的是std, std是标准模块,能用std就不能第三方的。std传送门

但是,我太推荐用server,oak就很不错,它是模仿koa的一个库。oak传送门

在编写前,我们先看下风格指南deno风格指南传送门

比如

用mod.ts代替index.ts, 把index改成mod

在文件名中使用下划线,而不是破折号

顶级函数不应使用箭头语法(这个应该在非deno也适用,因为如果是具名函数,编辑器可以自动导入,不用手动找路径)

于是使用oak之前,我们先弄好基础目录结构(仅供参考)

--.vscode

---- launch.json (编辑器配置,vscode示例)

--modules

---- oak(缓存目录,不是属于源码,但是应该加入git)

--src (源码位置)

----deps.ts(第三方依赖主入口)

----mod.ts(代码主入口)

--test(基本介绍)

主要由四部分组成

开发环境

依赖(缓存)

源码

测试

vscode配置或者其他配置见开发调试传送门

vscode参考配置, 添加 launch.json文件,文件内容如下

{

"version": "0.2.0",

"configurations": [

{

"name": "Debug Deno (Allow All)",

"type": "node",

"request": "launch",

"cwd": "${workspaceFolder}",

"runtimeExecutable": "deno",

"runtimeArgs": [

"run",

"--inspect-brk",

"-A",

"src/mod.ts",

"test/mod.ts",

],

"port": 9229,

"console": "integratedTerminal"

}

]

}

复制代码

配置好了,就可以写源码了,先在deps.ts添加oak和mysql依赖

export { Application, Router } from "https://deno.land/x/oak/mod.ts";

export { Client } from "https://deno.land/x/mysql/mod.ts";

复制代码

(考虑到deno官方访问限制,我的传送门能是github尽量是GitHub,deno_mysql传送门)

关于ts类型小谈

(这里我们还会发现一个问题,怎么没导入ts类型,因为这是第三方模块,第三方模块会指定类型,指定方式如下)

///

export const foo = "foo";

复制代码

如果我们导入的是js文件,那么d.ts文件如下引入用注释的方式引入,如下

// @deno-types="./foo.d.ts"

import * as foo from "./foo.js";

复制代码

(这个看起来很傻瓜,但是好处是清晰和稳定)

好了,我们写好了deps.ts,那么在mod.ts中引入使用吧。

import { Application, Router, Client } from "./deps.ts"

const client = await new Client().connect({

hostname: ip地址,

username: "root",

db: "",

poolSize: 3, // connection limit

password: "",

});

const pcRouter = new Router()

const app = new Application()

pcRouter

.prefix('/pc')

.use(async (context, next) => {

// 这里可以设置token拦截等,比如 if(没登陆) return context.response.body = JSON.stringify({msg: ''})

return next()

})

.get("/banner/list", async (context) => {

const list = await client.query(`select * from banner ORDER BY position DESC`)

context.response.body = JSON.stringify(list)

})

app.use((context, next) => {

context.response.headers.set('Access-Control-Allow-Origin', '*')

context.response.headers.set('Access-Control-Allow-Headers', '*')

context.response.headers.set('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS')

if(context.request.method == 'OPTIONS'){

context.response.status = 200

}

return next()

})

app.use(pcRouter.routes())

console.log("http://localhost:10086")

await app.listen({ port: 10086 })

复制代码

写好代码,运行下

在运行前,我们需要先设置缓存目录位置,如果是windows,那么可以在ps(ps怎么打开?windows键+R,输入powershell回车 )里面设置

$Env:DENO_DIR = "F:\deno\\modules"

复制代码

完成后执行缓存

deno cache -r --lock=lock.json src/deps.ts

复制代码

最后在根目录下执行

deno run --allow-net .\src\mod.ts

复制代码

(这里又有一个问题,为啥要执行 --allow-net ,因为deno默认是安全的,所以需要允许网络之类的,不然文件,网络等操作无法被执行))

[deno权限传送门](https://denolang.cn/manual/getting_started/permissions.html)

这时候访问 http://localhost:10086/pc/banner/list, 就可以拿到轮播列表啦。

好,入门成功。

使用编辑器调试

上面的launch.json设置后,我们在vscode按下f5就可以自动启动啊,权限也是最高得,如果要修改可以编辑json文件。

(如果无法启动,很可能端口被你修改了,端口不要修改)

然后就可以愉快得玩耍了,如图打断点

5c4600ff68a22983e7ce379f77646775.png

对了,还有一个很重要得事情,那就是怎么实现deno,因为deno和ts文件js文件,tsx文件等还是由区别的。

好了 ,一切很完美,但是这时候我们转回其他项目,会发现,到处都是红色的报错,因为ts、js等文件被deno插件给解析,我们需要只有在deno项目才启动它,于是可以在其他项目禁用deno。

禁用方法如下, 然后重启即可

d39bb9bb35247d08ebb1b6704b77b654.png

其他一些:

下载出错

鉴于国内原因以及dns污染,依赖不能被很好的下载,如下

0e107dd60c77a45d200f1d6e806ad0ba.png

“那个”挂全局也不行,这时候我们需要修改host文件,在host文件添加

199.232.68.133 raw.githubusercontent.com

复制代码

调试允许出错

70e10f91be52397f1073f7ac419772cc.png

原因是开启了--inspect-brk,但是端口对不上,可以修改成默认值9229

db

db也不是只有denomysql,还有denodb这个优秀的库,但是由于denomysql是国人写的于是支持下~~

DenoDB支持PostgreSQL, MySQL, MariaDB, SQLite and MongoDB, DenoDB传送门

但是deno_mysql体积会更小一点,更专注mysql

mysql的语法文档 mysql菜鸟教程

oak

除了oak,还有abc(也是国人写的),传送门

请求

deno遵守浏览器规范,支持setTimeout、Blob、Worker、FormData等,请求可以用Fetch, 文档可以直接看MDN上的,Fetch传送门

使用npm包

deno还支持node,node下面有一个module模块,就支持创建一个require函数,如下

import { createRequire } from "https://deno.land/std/node/module.ts";

const require = createRequire(import.meta.url);

复制代码

这里我们就获取到了require函数,是不是很熟悉呢。

获取插件

比如

--完--

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值