web-dev-qa-db-ja.com

Node.jsのRails consoleの同等性

Node.js Expressフレームワークを試し、Railsconsole。NodeJSの世界にそのようなものはありますか?のように、コンソールを介してモデルと対話できるプラグインを探しています。

そうでない場合は、手動でオブジェクトを追加/削除したり、データのメソッドをテストしたりするなど、Node.jsモデルとデータをどのように操作できますか?

34
AdamNYC

簡単です:プログラムに [〜#〜] repl [〜#〜] を追加します

6
DrBloodmoney

次の行/コンポーネントを使用してjsファイル(例:console.js)を作成して、独自のREPL)を作成します。

  1. ノードの組み込みreplが必要です:var repl = require("repl");
  2. Db、誓約するライブラリなど、すべての主要な変数をロードします。
  3. var replServer = repl.start({});を使用してreplをロードします
  4. _replServer.context.<your_variable_names_here> = <your_variable_names_here>_を使用してreplをキー変数にアタッチします。これにより、変数はREPL(ノードコンソール)で使用可能/使用可能になります。

例:ノードアプリに次の行がある場合:var db = require('./models/db')次の行をconsole.jsに追加します

_ var db = require('./models/db');
 replServer.context.db = db;
_
  1. コマンド_node console.js_を使用してコンソールを実行します

Console.jsファイルは次のようになります。

_var repl = require("repl");

var epa = require("epa");
var db = require("db");

// connect to database
db.connect(epa.mongo, function(err){
  if (err){ throw err; }

  // open the repl session
  var replServer = repl.start({});

  // attach modules to the repl context
  replServer.context.epa = epa;
  replServer.context.db = db;  
});
_

次のようにプロンプ​​トをカスタマイズすることもできます。

_var replServer = repl.start({
  Prompt: "Node Console > ",
});
_

完全なセットアップと詳細については、以下を確認してください: http://derickbailey.com/2014/07/02/build-your-own-app-specific-repl-for-your-nodejs-app/

オプションの完全なリストについては、プロンプト、色などのreplを渡すことができます: https://nodejs.org/api/repl.html#repl_repl_start_options

この情報をありがとう Derick Bailey


更新:

GavinBelsonには sequelize ORMで実行するための優れた推奨事項 (またはreplでpromise処理が必要なもの)があります。

現在、sequelizeも実行しており、ノードコンソールに_--experimental-repl-await_フラグを追加しています。

毎回入力するのはたくさんあるので、私はhighly追加することをお勧めします:

_"console": "node --experimental-repl-await ./console.js"_

_package.json_のscriptsセクションに移動して、次のコマンドを実行できるようにします。

_npm run console_

全部をタイプする必要はありません。

次に、次のように、エラーが発生することなくPromiseを処理できます。

const product = await Product.findOne({ where: { id: 1 });

53
Ira Herman

私はノードの使用経験があまりありませんが、コマンドラインにnodeと入力して、ノードコンソールにアクセスできます。その後、モデルを手動で要求していました

23
Vall3y

これはあなたの質問に完全には答えないかもしれませんが、明確にするために、node.jsはRailsよりもはるかに低レベルであり、Railsのようなツールやデータモデルを規定していません。フレームワークというよりはプラットフォームです。

よりRailsのようなエクスペリエンスを探している場合は、 Meteor など、node.jsの上に構築されたより「フル機能の」フレームワークを検討することをお勧めします。

6
7zark7

SQLデータベースを使用してこれを行う方法は次のとおりです。

インストールして使用する Sequelize 、これはRailsのアクティブレコードに対するノードのORM回答です。スキャフォールディングモデルと移行用のCLIもあります。

node --experimental-repl-await

> models = require('./models'); 
> User = models.User; //however you load the model in your actual app this may vary
> await User.findAll(); //use await, then any sequelize calls here

TLDR

これにより、Railsアクティブレコードの場合と同じように、すべてのモデルにアクセスできます。Sequelizeには少し慣れが必要ですが、多くの点で、アクティブレコードよりも柔軟性があります。同じ機能を持っています。

Sequelizeはpromiseを使用するため、これらをREPLで適切に実行するには、ノードの実行時に--experimental-repl-awaitフラグを使用する必要があります。そうしないと、bluebirdpromiseエラーが発生する可能性があります。

Require( './ models')ステップを入力したくない場合は、console.js(ディレクトリのルートにあるREPL)のセットアップファイル)を使用してプリロードできます。これですが、REPLでこの1行を入力する方が簡単だと思います

4
GavinBelson