如何将 PostgreSQL 数据库连接到 Sveltekit 并运行查询?

kha*_*dja 7 postgresql svelte sveltekit

我正在尝试将我的 postgres 数据库连接到我的网络应用程序。根据这篇文章,我的hooks.js连接设置如下:

export const handle = async ({event, resolve}) => {
  event.locals = {
    user: 'me',
    host: 'localhost',
    database: 'test',
    password: 'password',
    port: 1234,
  }
  const response = await resolve(event)
  return response;
}
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试设置我的端点。如何访问端点中的数据库并设置查询?

Nik*_*k P 6

我认为您缺少连接数据库的部分。通过上面提供的代码片段,看起来您正在尝试在 locals 变量中传递数据库连接信息,但您需要传递的是数据库连接本身

首先,您需要一个 Postgres 客户端。您可以使用任何您想要的,我将向您展示与此处找到的 postgresjs 包的连接可能是什么样子

钩子.js

import postgres from 'postgres';

export const handle = async ({event, resolve}) => {
  const sql = postgres('postgres://username:password@host:port/database');

  event.locals = {
    sql: sql
  };
  const response = await resolve(event);
  return response;
};
Run Code Online (Sandbox Code Playgroud)

您必须像上面一样在连接字符串中填写数据库信息,但现在您的端点将可以访问locals包含 sql 连接的对象。

下一个:

你的端点.js

export async function get({ locals }) {
  // destructure to get the sql connection
  const { sql } = locals;

  // Do work with the connection
  // different connection libraries will do this in different ways
  // postgres.js uses tagged template literals,
  // and you pass in sql statements
  const result = await sql`SELECT name, age FROM users`;

  // Now you have a result object that contains the query response
  // Do what you need to do from here

  ... code to work with result ... 
};
Run Code Online (Sandbox Code Playgroud)

发送响应所需的其余内容等都记录在Sveltekit 文档中。这里的关键要点是您在文件中设置连接hooks.js,然后将其与请求一起传递到端点处理程序。这将您的设置逻辑集中在一处。

另外,如果您不熟悉 Javascript 的 postgres 库,请尝试一些。postgres.js 的设计简单明了,就像pg一样。您还可以升级到为您做更多事情的库,例如sequelizeprisma

我个人是 Prisma 的忠实粉丝,但我鼓励您尝试并找到最适合您的。