Knex 要求安装 sqlite3 但我正在使用 mysql 数据库

Knex asking for install sqlite3 but I'm using mysql database

我正在尝试查询我的本地 MySQL 数据库,但是当我使用 knex 时,它告诉我安装 sqlite3 的驱动程序,我不需要它,因为我的数据库是MySQL.

我尝试安装 sqlite3 的驱动程序只是为了看看它是否能解决我的问题,但它只是让其他与 sqlite3 相关的错误出现,所以我只是删除了 sqlite3 驱动程序。

我已经有MySQL的驱动了。下面是我的代码。

为什么会出现这个错误?据我所知,它不应该要求我提供 sqlite3 驱动程序,而只是要求我在 knex 配置中传递的 MySQL。

*** 我已经尝试使用驱动程序 mysql2 但没有任何改变...

const knex = require('knex');
require('dotenv').config();

const listUsers = async (req, res) => {

    console.log(process.env.DATABASE_PASSWORD);
    //res.send(process.env.DATABASE_USER);

    knex({
        client: 'mysql',
        connection: {
            host: process.env.DATABASE_HOST,
            user: process.env.DATABASE_USER,
            password: process.env.DATABASE_PASSWORD,
            database: process.env.DATABASE_NAME
        }
    })

    knex('users')
        .select('*')
        .then(mysqlres => res.send(mysqlres))
        .catch(mysqlerr => res.send(console.log(mysqlerr)))
}

module.exports = {
    listUsers
};

这是我的错误:


Knex: run
$ npm install sqlite3 --save
Cannot find module 'sqlite3'
Require stack:
- D:\coding\Studies\Moblex\backend-mysql\node_modules\knex\lib\dialects\sqlite3\index.js
- D:\coding\Studies\Moblex\backend-mysql\node_modules\knex\lib\knex.js
- D:\coding\Studies\Moblex\backend-mysql\node_modules\knex\lib\index.js
- D:\coding\Studies\Moblex\backend-mysql\node_modules\knex\knex.js
- D:\coding\Studies\Moblex\backend-mysql\src\controllers\userController.js
- D:\coding\Studies\Moblex\backend-mysql\src\routes.js
- D:\coding\Studies\Moblex\backend-mysql\src\server.js
Error: Cannot find module 'sqlite3'
Require stack:
- D:\coding\Studies\Moblex\backend-mysql\node_modules\knex\lib\dialects\sqlite3\index.js
- D:\coding\Studies\Moblex\backend-mysql\node_modules\knex\lib\knex.js
- D:\coding\Studies\Moblex\backend-mysql\node_modules\knex\lib\index.js
- D:\coding\Studies\Moblex\backend-mysql\node_modules\knex\knex.js
- D:\coding\Studies\Moblex\backend-mysql\src\controllers\userController.js
- D:\coding\Studies\Moblex\backend-mysql\src\routes.js
- D:\coding\Studies\Moblex\backend-mysql\src\server.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:965:15)
    at Function.Module._load (internal/modules/cjs/loader.js:841:27)
    at Module.require (internal/modules/cjs/loader.js:1025:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at Client_SQLite3._driver (D:\coding\Studies\Moblex\backend-mysql\node_modules\knex\lib\dialects\sqlite3\index.js:36:12)    
    at Client_SQLite3.initializeDriver (D:\coding\Studies\Moblex\backend-mysql\node_modules\knex\lib\client.js:232:26)
    at Client_SQLite3.Client (D:\coding\Studies\Moblex\backend-mysql\node_modules\knex\lib\client.js:70:10)
    at new Client_SQLite3 (D:\coding\Studies\Moblex\backend-mysql\node_modules\knex\lib\dialects\sqlite3\index.js:18:10)        
    at new Knex (D:\coding\Studies\Moblex\backend-mysql\node_modules\knex\lib\knex.js:53:28)
    at Knex (D:\coding\Studies\Moblex\backend-mysql\node_modules\knex\lib\knex.js:17:12)
(node:12648) UnhandledPromiseRejectionWarning: Error: Knex: run
$ npm install sqlite3 --save
Cannot find module 'sqlite3'
Require stack:
- D:\coding\Studies\Moblex\backend-mysql\node_modules\knex\lib\dialects\sqlite3\index.js
- D:\coding\Studies\Moblex\backend-mysql\node_modules\knex\lib\knex.js
- D:\coding\Studies\Moblex\backend-mysql\node_modules\knex\lib\index.js
- D:\coding\Studies\Moblex\backend-mysql\node_modules\knex\knex.js
- D:\coding\Studies\Moblex\backend-mysql\src\controllers\userController.js
- D:\coding\Studies\Moblex\backend-mysql\src\routes.js
- D:\coding\Studies\Moblex\backend-mysql\src\server.js
    at Client_SQLite3.initializeDriver (D:\coding\Studies\Moblex\backend-mysql\node_modules\knex\lib\client.js:236:13)
    at Client_SQLite3.Client (D:\coding\Studies\Moblex\backend-mysql\node_modules\knex\lib\client.js:70:10)
    at new Client_SQLite3 (D:\coding\Studies\Moblex\backend-mysql\node_modules\knex\lib\dialects\sqlite3\index.js:18:10)        
    at new Knex (D:\coding\Studies\Moblex\backend-mysql\node_modules\knex\lib\knex.js:53:28)
    at Knex (D:\coding\Studies\Moblex\backend-mysql\node_modules\knex\lib\knex.js:17:12)
    at listUsers (D:\coding\Studies\Moblex\backend-mysql\src\controllers\userController.js:19:5)
    at Layer.handle [as handle_request] (D:\coding\Studies\Moblex\backend-mysql\node_modules\express\lib\router\layer.js:95:5)  
    at next (D:\coding\Studies\Moblex\backend-mysql\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (D:\coding\Studies\Moblex\backend-mysql\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (D:\coding\Studies\Moblex\backend-mysql\node_modules\express\lib\router\layer.js:95:5)  
(node:12648) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:12648) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

伙计们,我只是想在应用配置时我需要创建一个新的 Knex 实例,这将起作用!而它之前要求驱动器sqlite3的原因是因为knex使用sqlite3模型。因此,因为我没有使用自己的配置创建 Knex 的新实例,所以它使用的是默认设置。

所以这是我的解决方案代码!

const listUsers = async (req, res) => {


   const knexapp = knex({
        client: 'mysql2',
        connection: {
            database: process.env.DATABASE_NAME,
            user: process.env.DATABASE_USER,
            password: process.env.DATABASE_PASSWORD
        },
        pool: {
            min: 2,
            max: 10
        },
        migrations: {
            tableName: 'knex_migrations'
        }
    })

    knexapp('users').select('*').then(resmsql => res.send(resmsql)).catch(err => res.send(err))