Knex所需的配置选项“客户端”丢失错误

时间:2018-08-30 09:29:35

标签: javascript node.js knex.js

这是我的文件。 knexfile.js

require('dotenv').config();
module.exports = {
      development: {
        client: process.env.DB_CLIENT,
        connection: {
          host: process.env.DB_HOST,
          user: process.env.DB_USER,
          password: process.env.DB_PASSWORD,
          database: process.env.DB_NAME
        },
        migrations: {
          directory: __dirname + '/db/migrations'
        },
        seeds: {
          directory: __dirname + '/db/seeds'
        }
      }
    };

knex.js

const environment = process.env.NODE_ENV || 'development';
let config = require('../knexfile')[environment];
module.exports = require('knex')(config);

index.js

require('babel-register');
import express from 'express';

const port = process.env.PORT || 5000;
const app = express();

app.listen(port, () => {
  console.log('Server running on portt:', port); // eslint-disable-line
});

export default app;

现在,当我运行以下命令时: knex migrate:make create_employee_and_company_tables 它给出以下错误

Error: knex: Required configuration option 'client' is missing.
    at new Client (/Users/sujin.v2px/NodeJS/nodees6/node_modules/knex/lib/client.js:99:11)
    at Knex (/Users/sujin.v2px/NodeJS/nodees6/node_modules/knex/lib/index.js:56:34)
    at initKnex (/usr/local/lib/node_modules/knex/bin/cli.js:73:10)
    at Command.<anonymous> (/usr/local/lib/node_modules/knex/bin/cli.js:139:22)
    at Command.listener (/usr/local/lib/node_modules/knex/node_modules/commander/index.js:315:8)
    at emitTwo (events.js:126:13)
    at Command.emit (events.js:214:7)
   ...

我缺少一些配置吗? client缺失实际上指的是什么?

7 个答案:

答案 0 :(得分:1)

为了使用<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <svg id="rootBox" width="375" height="812" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <rect x="0%" y="0%" width="100%" height="100%" fill="beige" /> <svg id="imageBox1" class="imageBox" x="25%" y="25%" width="50%" height="50%"> <image class="image" x="0" y="0" width="100%" height="100%" preserveAspectRatio="none" xlink:href="https://www.dropbox.com/s/bzm1y7tjrhl872s/Screenshot.png?raw=1" /> <image class="frame" x="0" y="0" width="100%" height="100%" preserveAspectRatio="none" xlink:href="https://www.dropbox.com/s/6njspwfz2hgfd03/iPhone_X_Black.png?raw=1" /> </svg> </svg>文件中的环境变量,请像这样将路径参数传递给.env

config

https://github.com/tgriesser/knex/issues/590

答案 1 :(得分:0)

您的process.env.DB_CLIENTundefined。您可以通过硬编码

进行验证
client: 'pg',

无需尝试使用环境变量/ dotenv。

万一所有配置读取失败并且配置未定义,则会引发不同的错误(无法读取client的{​​{1}})。

答案 2 :(得分:0)

我遇到了这个问题,并且我的配置是硬编码的:

client: 'pg',

答案 3 :(得分:0)

我观察到knexfile.js不支持没有路径的环境配置。
所以使用如下:

 require('dotenv').config({path: './'});

答案 4 :(得分:0)

这是一个答案,对于在这里居住的某些人来说可能会有所帮助,因为他们使用打字稿时存在相同的问题。 (超出dotEnv问题(请检查其他答案))。

“客户端”缺少错误和打字稿

问题是默认情况下,knex cli不支持您的打字稿export default

说明:

抛出以上错误将不起作用: enter image description here

这项工作: enter image description here

如您所见,您可以正常使用打字稿,甚至可以使用导入语法。然后,在导出时,需要直接使用commonjs语法。

如果不感激,您可以查看此github问题寻求解决方案:

https://github.com/tgriesser/knex/issues/1232

我不知道knex如何解析tsconfig.json。这可能很重要。您可以在knexfile.ts所在的位置添加一个新的tsconfig.json。

在我的情况下,我在配置文件中保存了该文件(它位于我的项目根目录中,而不是knexfile.ts [用于项目编译])

  "compilerOptions": {
    /* Basic Options */
    // "incremental": true,                   /* Enable incremental compilation */
    "target": "ES2018",                          /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
    "module": "commonjs",                     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
    // "lib": [],                             /* Specify library files to be included in the compilation. */
    "allowJs": true,     

您可能想更改目标。

另一个要点,您必须安装node-ts,因为它是在引擎盖下使用的。但是,如果您不这样做,则可能会遇到另一个完全错误。并且不要忘记安装客户端ǹpm i --save pg sqlite3 node-ts typescript knex。 (您可能希望分离开发人员依赖项。)

更多调查后,我会更新。深入解释原因!

答案 5 :(得分:0)

为我解决此问题的原因是在我使用的非标准环境名称的Knexfile中:

let dbConnection = {
  client : "pg",
  connection: connectionObject,
  migrations: {
    directory: './db/migrations'
  },
  useNullAsDefault: true
};

module.exports = {
  connection: dbConnection
};

所以我不得不运行knex migrate:make --env connection migration_name,并且运行正常。

答案 6 :(得分:0)

这里还有另一种可能,因为我还没有看到有人提到它:

如果您还使用knexfile,并且确定client的设置正确,例如“ pg”。 然后确保您的环境变量与knexfile匹配。

我的意思是,运行echo $NODE_ENV来查看您的NODE_ENV是什么。

就我而言,我的实际上是dev而不是developmentknexfile中的默认值)。