47

我正在尝试 Node.js Express 框架,并寻找允许我通过控制台与模型交互的插件,类似于 Rails 控制台。NodeJS 世界里有这样的事情吗?

如果没有,我如何与我的 Node.js 模型和数据进行交互,例如手动添加/删除对象、数据测试方法等?

4

5 回答 5

67

通过使用以下行/组件制作一个 js 文件(即:console.js)来创建您自己的 REPL:

  1. 需要节点的内置repl:var repl = require("repl");
  2. 加载所有关键变量,如 db、你发誓的任何库等。
  3. 使用加载replvar replServer = repl.start({});
  4. 使用 .将 repl 附加到您的关键变量replServer.context.<your_variable_names_here> = <your_variable_names_here>。这使得变量在 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标志。

每次都要输入很多,所以我强烈建议添加:

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

到您的scripts部分,package.json这样您就可以运行:

npm run console

并且不必输入整个内容。

然后你可以处理 Promise 而不会出错,如下所示:

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

于 2015-11-25T08:20:01.760 回答
22

我对node的使用不是很熟练,但是你可以node在命令行中输入来进入node控制台。然后我曾经手动要求模型

于 2013-01-27T20:47:15.717 回答
7

这是使用 SQL 数据库的方法:

安装和使用Sequelize,它是 Node 对 Rails 中 Active Record 的 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 需要一些时间来适应,但在许多方面它实际上比 Active Record 更灵活,同时仍然具有相同的功能。

Sequelize 使用 Promise,因此要在 REPL 中正确运行它们,您将需要--experimental-repl-await在运行节点时使用该标志。否则,你会得到 bluebird promise 错误

If you don't want to type out the require('./models') step, you can use console.js - a setup file for REPL at the root of your directory - to preload this. However, I find it easier to just type this one line out in REPL

于 2019-07-17T22:09:42.657 回答
6

很简单:在你的程序中添加一个REPL

于 2013-01-28T00:13:35.237 回答
5

这可能无法完全回答您的问题,但需要澄清的是,node.js 比 Rails 低得多,因此没有规定像 Rails 这样的工具和数据模型。它更像是一个平台而不是一个框架。

如果您正在寻找更像 Rails 的体验,您可能希望查看构建在 node.js 之上的更“功能齐全”的框架,例如Meteor等。

于 2013-01-27T17:45:54.373 回答