前言
Deno 是一个新兴的 JavaScript 运行时环境,它与 Node.js 不同,不仅自带了 TypeScript 支持,而且还提供了更好的安全性和模块化管理。在开发过程中,我们通常需要将数据保存到文件系统或数据库中,以便在应用程序重启后仍然可以访问它们。本文将介绍在 Deno 中实现数据持久化的方法和常见问题解决方案。
文件系统
读取文件
在 Deno 中,使用 Deno.readTextFile()
函数可以读取文本文件的内容,该函数返回一个 Promise 对象,可以使用 await
关键字等待其完成。例如,以下代码读取名为 example.txt
的文件的内容:
const content = await Deno.readTextFile("example.txt"); console.log(content);
写入文件
使用 Deno.writeTextFile()
函数可以将文本写入文件,该函数也返回一个 Promise 对象。例如,以下代码将字符串写入名为 example.txt
的文件:
const content = "Hello, Deno!"; await Deno.writeTextFile("example.txt", content);
追加文件
如果要将内容追加到文件末尾,可以使用 Deno.writeTextFileSync()
函数,例如:
const content = "Hello, Deno!"; Deno.writeTextFileSync("example.txt", content, { append: true });
删除文件
使用 Deno.remove()
函数可以删除文件,例如:
await Deno.remove("example.txt");
数据库
连接数据库
Deno 中有多个第三方数据库连接库可供选择,例如 deno-postgres
、mysql
、mongodb
等。这里以 deno-postgres
为例说明如何连接 PostgreSQL 数据库。
首先,需要安装 deno-postgres
库:
deno install --allow-net --allow-read https://deno.land/x/postgres/mod.ts
然后,在代码中使用以下代码连接到 PostgreSQL 数据库:
-- -------------------- ---- ------- ------ - ------ - ---- -------------------------------------- ----- ------ - --- -------- ----- ----------- --------- ----------- --------- ---------------- --------- ----------- ----- ----- --- ----- -----------------
查询数据
使用 client.query()
函数可以执行 SQL 查询,例如:
const result = await client.query("SELECT * FROM users"); console.log(result.rows);
插入数据
使用 client.query()
函数可以执行 SQL 插入操作,例如:
await client.query("INSERT INTO users (name, age) VALUES ($1, $2)", "Alice", 25);
更新数据
使用 client.query()
函数可以执行 SQL 更新操作,例如:
await client.query("UPDATE users SET age = $1 WHERE name = $2", 26, "Alice");
删除数据
使用 client.query()
函数可以执行 SQL 删除操作,例如:
await client.query("DELETE FROM users WHERE name = $1", "Alice");
断开连接
使用 client.end()
函数可以断开与数据库的连接,例如:
await client.end();
常见问题解决方案
权限问题
在 Deno 中,访问文件系统和网络资源需要明确授权。如果没有正确的权限,将会抛出错误。例如,以下代码尝试读取不存在的文件:
const content = await Deno.readTextFile("not_exist.txt");
运行代码时,将会抛出以下错误:
error: Uncaught PermissionDenied: read access to "/path/to/not_exist.txt", run again with the --allow-read flag
要解决此问题,需要在运行代码时添加 --allow-read
标志,例如:
deno run --allow-read app.ts
同样地,如果要访问网络资源,则需要添加 --allow-net
标志。
数据库连接问题
在连接到数据库时,需要确保数据库服务器正在运行,并且连接参数正确。如果连接失败,则可能会抛出以下错误:
error: ConnectionError: could not connect to server: Connection refused Is the server running on host "localhost" (127.0.0.1) and accepting TCP/IP connections on port 5432?
要解决此问题,需要确保数据库服务器正在运行,并且连接参数正确。
结论
本文介绍了在 Deno 中实现数据持久化的方法和常见问题解决方案。文件系统和数据库都是常见的数据持久化方式,它们的使用方法和注意事项也有所不同。在实际开发中,需要根据具体情况选择合适的数据持久化方式,并注意权限和连接问题。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67425e8fdb344dd98dd65e2b