等价于 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 本机驱动程序记录所有查询