等价于 Node.js 的 Rails 控制台

Posted

技术标签:

【中文标题】等价于 Node.js 的 Rails 控制台【英文标题】:Equivalence of Rails console for Node.js 【发布时间】:2013-01-11 01:43:42 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

    需要节点的内置repl:var repl = require("repl"); 加载所有关键变量,如 db、任何你发誓的库等。 使用var replServer = repl.start(); 加载repl 使用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;
    使用命令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 有一个 great recommendation for running with sequelize ORM(或任何需要在 repl 中进行承诺处理的东西)。

我现在也在运行 sequelize,对于我的节点控制台,我正在添加 --experimental-repl-await 标志。

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

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

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

npm run console

而且不必全部输入。

然后你可以处理 promise 而不会出错,像这样:

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

【讨论】:

这是 OP 想要做的更好的答案【参考方案2】:

这是使用 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 错误

如果您不想输入 require('./models') 步骤,您可以使用 console.js - 目录根目录下的 REPL 设置文件 - 来预加载它。但是,我发现在 REPL 中输入这一行会更容易

【讨论】:

【参考方案3】:

很简单:将REPL 添加到您的程序中

【讨论】:

你有例子吗? 请更具体。我没有得到你的答案。【参考方案4】:

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

【讨论】:

【参考方案5】:

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

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

【讨论】:

以上是关于等价于 Node.js 的 Rails 控制台的主要内容,如果未能解决你的问题,请参考以下文章

`Node.js` 和/或其他 Javascript 分支相对于非 JS 框架(Rails、Django...)的性能、稳定性和速度

什么是 Node.js 的 Connect、Express 和“中间件”?

使用适用于 Node JS 的 mongodb 本机驱动程序记录所有查询

启动 Node.js 控制台时如何运行脚本?

等效于 Node.JS 的 file_get_contents()

Node.js OpsWorks 层控制台日志