web-dev-qa-db-ja.com

Knexに必要な構成オプション「クライアント」にエラーがありません

これが私のファイルです。 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
Sujin Shrestha

これは、TypeScriptを使用しているのと同じ問題があるため、ここに上陸する一部の人々にとって役立つ答えです。 (dotEnvの問題のポイントを超えています(他の答えを確認してください))。

「クライアント」にエラーとTypeScriptがありません

問題は、TypeScript export defaultは、デフォルトではknex cliでサポートされていません。

説明する:

上記のエラーをスローしても機能しません: enter image description here

そしてこの作品: enter image description here

ご覧のように、インポート構文などすべて、TypeScriptを通常どおり使用できます。次に、エクスポートするときにcommonjs構文を直接使用する必要があります。

高く評価されていない場合は、このgithubの問題を解決策について確認できます。

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

Tsconfig.jsonのknexの解決方法がわかりません。それは重要かもしれません。また、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,     

ターゲットを変更することもできます。

もう1つの重要なポイントは、node-tsは、ボンネットの下で使用されるため、インストールされます。ただし、そうしないと、別の完全なエラーが発生する場合があります。クライアントをインストールすることを忘れないでくださいǹpm i --save pg sqlite3 node-ts TypeScript knex。 (dev依存関係を分離することができます)。

さらなる調査の後に更新します。理由を深く説明するために!

4
Mohamed Allal

私はこの問題を抱えており、私の設定はハードコードされています:

client: 'pg',
2
JP.

.envファイルの環境変数を使用するには、次のようにconfigにパス引数を渡します。

require('dotenv').config({path: 'path-to-.env')

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

2
matsad

きみの process.env.DB_CLIENTundefinedです。ハードコーディングすることで確認できます

client: 'pg',

環境変数/ dotenvを使用しようとせずに。

すべての構成の読み取りが失敗し、構成が未定義だった場合、別のエラーがスローされます(client of undefinedを読み取ることはできません)。

0
Mikael Lepistö

観察されたknexfile.jsは、パスなしのenv configをサポートしていません。
次のように使用します。

 require('dotenv').config({path: './'});
0
Sujay U N

私にとってこの問題を解決したのは、非標準の環境名を使用していたKnexfileにありました:

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

module.exports = {
  connection: dbConnection
};

だから、knex migrate:make --env connection migration_nameそして、期待どおりに機能しました。

0
bzupnick