【发布时间】:2013-01-11 01:43:42
【问题描述】:
我正在尝试 Node.js Express 框架,并寻找允许我通过控制台与模型交互的插件,类似于 Rails 控制台。 NodeJS 世界里有这样的事情吗?
如果没有,我如何与我的 Node.js 模型和数据进行交互,例如手动添加/删除对象、数据测试方法等?
【问题讨论】:
标签: ruby-on-rails node.js console rails-console
我正在尝试 Node.js Express 框架,并寻找允许我通过控制台与模型交互的插件,类似于 Rails 控制台。 NodeJS 世界里有这样的事情吗?
如果没有,我如何与我的 Node.js 模型和数据进行交互,例如手动添加/删除对象、数据测试方法等?
【问题讨论】:
标签: ruby-on-rails node.js console rails-console
通过使用以下行/组件制作一个 js 文件(即:console.js)来创建您自己的 REPL:
var repl = require("repl");
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 });
【讨论】:
这是使用 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 中输入这一行会更容易
【讨论】:
很简单:将REPL 添加到您的程序中
【讨论】:
我对node的使用不是很熟练,但是可以在命令行输入node进入node控制台。然后我过去常常手动要求模型
【讨论】:
这可能无法完全回答您的问题,但需要澄清的是,node.js 比 Rails 低得多,因此没有规定像 Rails 这样的工具和数据模型。它更像是一个平台而不是一个框架。
如果您正在寻找更类似于 Rails 的体验,您可能希望查看基于 node.js 构建的更“功能齐全”的框架,例如 Meteor 等。
【讨论】: