【问题标题】:How do I integrate MYSQL with Sveltekit / nodejs如何将 MYSQL 与 Sveltekit / nodejs 集成
【发布时间】:2021-12-24 12:44:41
【问题描述】:

对于 nodejs 项目,我通常只遵循这个标准示例:

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'me',
  password : 'secret',
  database : 'my_db'
});
 
connection.connect();
 
connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
  if (error) throw error;
  console.log('The solution is: ', results[0].solution);
});
 
connection.end();

Sveltekit 不允许 var mysql = require('mysql'); 所以我尝试用import { mysql } from 'mysql'; 替换它 这也行不通。 不知道是否有人有这方面的经验并且可以指导我理解我的错误。

【问题讨论】:

  • MySQL 是一个后端节点包,SveleteKit 虽然可以做 SSR,但它是一个运行在浏览器中的前端应用程序。这行不通,您将需要其他 API
  • 在我的所有节点项目中,我使用const mysql = require('mysql');。试试这是否适合你。

标签: javascript mysql node.js svelte sveltekit


【解决方案1】:

1.安装mysql2包

npm install --save mysql2

2。设置 MySQL 连接

lib/db/mysql.js

import mysql from 'mysql2/promise';

export const mysqlconn = await mysql.createConnection({ 
    host: '<myhost>',
    user: 'root',
    password: 'mypassword',
    database: 'mydatabase'
});

3.创建 API 端点

routes/api/read.js

import { mysqlconn } from '$lib/db/mysql';


export async function get() {
    
    let results = await mysqlconn.query('SELECT * FROM mytable')
        .then(function([rows,fields]) {
            console.log(rows);
            return rows;
        });
    
    return {
        body: results
    }
}

更新

哪个更好?上面的代码还是这个代码?

1.安装mysql2包

npm install --save mysql2

2。设置 MySQL 连接

lib/db/mysql.js

import mysql from 'mysql2/promise';

let mysqlconn = null;

export function mysqlconnFn() {

    if (!mysqlconn) {
        mysqlconn = mysql.createConnection({ 
            host: '<myhost>',
            user: 'root',
            password: 'mypassword',
            database: 'mydatabase'
        });
    }

    return mysqlconn;
}

3.创建 API 端点

routes/api/read.js

import { mysqlconnFn } from '$lib/db/mysql';


export async function get() {

    let mysqlconn = await mysqlconnFn();

    let results = await mysqlconn.query('SELECT * FROM mytable')
        .then(function([rows,fields]) {
            console.log(rows);
            return rows;
        });
    
    return {
        body: results
    }
}

更新 2

您也可以在hooks中设置MySQL连接。

参考:https://github.com/sveltejs/kit/issues/1538#issuecomment-1002106271

【讨论】:

    【解决方案2】:

    像 knex 这样的东西可以工作吗?

    // in /src/lib/db.js
    import knex from 'knex'
    
    export default knex({
      client: 'mysql',
      version: '5.7',
      connection: {
        host: '127.0.0.1',
        port: 3306,
        user: 'root',
        password: '',
        database: 'library'
      },
    })
    

    端点中的任何地方

    // in /src/routes/api/books.js
    import db from '$lib/db'
    
    // get all books
    export const get = async request => {
      const books= await db.select().from('books')
    
      if (voters) {
        return {
          body: {
            books
          }
        }
      }
      // else
    }
    
    // add a book
    export const post = async ({ body }) => {
      const added = await db
        .insert({
          title: body.get('title'),
          author: body.get('author'),
        // .insert(JSON.parse(body)) // or you can send JSON.stringfy(dataObject)
        .into('admins')
    
      if (added) {
        return {
          status: 200,
          body: {
            message: 'A book added successfully'
          }
        }
      }
      // else
    }
    

    您可以按照自己喜欢的方式获取它,

    这可能不是合适的答案,我上周末才找到的

    【讨论】:

      猜你喜欢
      • 2021-09-08
      • 1970-01-01
      • 2019-01-04
      • 1970-01-01
      • 2023-01-30
      • 1970-01-01
      • 2018-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多