Как использовать библиотеку mysql2 с сапером?

#node.js #svelte #rollup #sapper #node-mysql2

Вопрос:

Я создаю приложение в Svelte Sapper. У меня есть routes/account/login.js маршрут API, где я пытаюсь использовать mysql2. Сам маршрут работает (я проверил у Почтальона), но как только я импортирую mysql, сервер выходит из строя и появляется ошибка:

 [rollup-plugin-svelte] The following packages did not export their `package.json` file so we could not check the "svelte" field. If you had difficulties importing svelte components from a package, then please contact the author and ask them to export the package.json file.

- mysql2
 
 import mysql from "mysql2/promise";

export async function post(req, res) {
  //route test
  const { login, password } = req.body;
  res.end(`${login}, ${password}`);
}
 

Что я могу сделать, чтобы этот импорт работал?
Что я могу сделать, чтобы этот импорт работал?

В документации сапера ничего не говорится о том, нужно ли вам дополнительно что-то менять в конфигурации. https://sapper.svelte.dev/docs#Server_routes

Ответ №1:

Я нашел решение. Мне нужно было создать @lib папку в src/node_modules папке, и там файл, например. db.js . В этом файле вместо import вас нужно использовать require() ! а затем вам нужно экспортировать функцию, которая подключается к базе данных. а затем вы можете импортировать это в путь

 //src/node_modules/@lib/db.js
const mysql = require("mysql2");

export async function connectToDatabase() {
  return mysql.createConnection({
    host: "localhost",
    ....
  })
}
 
 //routes/account/login.js
import { query } from "@lib/db";
export async function post(req, res) {
  ...
}