维生素C+苗条套装+ MariaDB:导入带有数据库连接的脚本会引发奇怪的错误

h7appiyu  于 2023-02-08  发布在  其他
关注(0)|答案(1)|浏览(195)

我试图建立一个简单的应用程序使用Vite + SvelteKit,将连接到服务器与MariaDB数据库。我尝试了许多选项,但没有工作。当我尝试这样做的连接:
下面是我用于连接到数据库的脚本:

import mysql from 'mysql2/promise';

const connection = await mysql.createConnection({
  host: "127.0.0.1",
  user: "admin",
  password: "givdb",
  database: "givdb",
});

console.log('Connected to MariaDB');

export default connection;

这里是主要的苗条的网页。

<script>
  import connection from '../db';
  
  async function fetchData() {
    const [rows, fields] = await connection.execute('SELECT * FROM User');
    console.log(rows[0].Email,"(This was fetched from database)");
  }

  fetchData();
</script>

<h1>Welcome to SvelteKit</h1>
<p>Visit <a href="https://kit.svelte.dev">kit.svelte.dev</a> to read the documentation</p>

此代码可成功从数据库中提取数据,如下所示:

> vite dev "--" "--open"


  VITE v4.1.1  ready in 412 ms

  ➜  Local:   http://localhost:5173/
  ➜  Network: use --host to expose
  ➜  press h to show help
Connected to MariaDB
lonzikormos@gmail.com (This was fetched from database)
17:22:43 [vite-plugin-svelte] ssr compile done.
package         files     time     avg
giv-sveltekit       3   50.7ms  16.9ms

但应用程序显示只是将整个应用程序替换为错误:

manifest.js:14 
TypeError: Cannot read properties of undefined (reading 'prototype')
    at node_modules/.pnpm/safer-buffer@2.1.2/node_modules/safer-buffer/safer.js (safer.js:25:33)
    at __require2 (chunk-7FP5O474.js?v=72350a59:10:50)
    at node_modules/.pnpm/iconv-lite@0.6.3/node_modules/iconv-lite/lib/index.js (index.js:3:14)
    at __require2 (chunk-7FP5O474.js?v=72350a59:10:50)
    at node_modules/.pnpm/mysql2@3.1.0/node_modules/mysql2/lib/parsers/string.js (string.js:3:15)
    at __require2 (chunk-7FP5O474.js?v=72350a59:10:50)
    at node_modules/.pnpm/mysql2@3.1.0/node_modules/mysql2/lib/packets/packet.js (packet.js:11:22)
    at __require2 (chunk-7FP5O474.js?v=72350a59:10:50)
    at node_modules/.pnpm/mysql2@3.1.0/node_modules/mysql2/lib/packet_parser.js (packet_parser.js:3:16)
    at __require2 (chunk-7FP5O474.js?v=72350a59:10:50)

当我注解试图获取数据的部分时,错误保留,但是当我还使用第一次尝试的import Line from +page.svelte注解获取部分时(import connection from '../db';),错误消失,但我无法从数据库中提取数据...

所以问题的根源是导入数据库连接脚本。但我不知道如何解决这个问题。请帮助我绝望。

jutyujz0

jutyujz01#

mysql2,以及可能的一些依赖项,是与浏览器不兼容的节点库。通过将相应的代码放在Svelte文件中,它将在浏览器中运行,因此无法工作。
当使用SvelteKit时,你应该把这样的代码移到一个服务器load函数中,我把它放在一个+page.server.ts/js文件中是为了确保这一点。然后数据被服务器获取,并可以作为data属性传递到页面。请参阅文档中的示例。

相关问题