我试图建立一个简单的应用程序使用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';),错误消失,但我无法从数据库中提取数据...
所以问题的根源是导入数据库连接脚本。但我不知道如何解决这个问题。请帮助我绝望。
1条答案
按热度按时间jutyujz01#
mysql2
,以及可能的一些依赖项,是与浏览器不兼容的节点库。通过将相应的代码放在Svelte文件中,它将在浏览器中运行,因此无法工作。当使用SvelteKit时,你应该把这样的代码移到一个服务器
load
函数中,我把它放在一个+page.server.ts
/js
文件中是为了确保这一点。然后数据被服务器获取,并可以作为data
属性传递到页面。请参阅文档中的示例。