Ruby on rails Node.js的Rails控制台的等效性
我正在试用Node.js Express框架,并寻找一个插件,该插件允许我通过控制台与模型交互,类似于Rails控制台。在NodeJS的世界里有这样的事情吗Ruby on rails Node.js的Rails控制台的等效性,ruby-on-rails,node.js,console,rails-console,Ruby On Rails,Node.js,Console,Rails Console,我正在试用Node.js Express框架,并寻找一个插件,该插件允许我通过控制台与模型交互,类似于Rails控制台。在NodeJS的世界里有这样的事情吗 如果没有,我如何与我的Node.js模型和数据交互,例如手动添加/删除对象、数据测试方法等?这可能无法完全回答您的问题,但要澄清的是,Node.js的级别远低于Rails,因此没有规定Rails之类的工具和数据模型。与其说它是一个框架,不如说它是一个平台 如果您希望获得更像Rails的体验,您可能希望看到构建在node.js之上的更“全功能
如果没有,我如何与我的Node.js模型和数据交互,例如手动添加/删除对象、数据测试方法等?这可能无法完全回答您的问题,但要澄清的是,Node.js的级别远低于Rails,因此没有规定Rails之类的工具和数据模型。与其说它是一个框架,不如说它是一个平台
如果您希望获得更像Rails的体验,您可能希望看到构建在node.js之上的更“全功能”的框架,例如,等等。我在使用node方面不是很有经验,但您可以在命令行中输入
node
,以访问节点控制台。然后,我习惯于手动要求模型很简单:向程序中添加一个创建自己的REPL,方法是创建一个js文件(即:console.js),其中包含以下行/组件:
var repl=Require(“repl”)代码>
var replServer=repl.start({})加载repl代码>
replServer.context将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 > ",
});
您甚至可以像这样自定义提示:
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 > ",
});
有关完整设置和更多详细信息,请查看: 要查看完整的选项列表,您可以传递repl,如提示符、颜色等: 感谢您提供此信息
更新: GavinBelson有一个(或任何需要在repl中处理承诺的内容) 我现在也在运行sequelize,并且为我的节点控制台添加了
--experimental repl wait
标志
每次都要输入很多内容,因此我建议添加:
“控制台”:“节点——实验性repl wait./console.js”
转到package.json中的scripts
部分,这样您就可以运行:
npm运行控制台
不必把整件事都打出来
然后,您可以处理承诺而不会出错,如下所示:
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 > ",
});
const product=await product.findOne({where:{id:1});
以下是使用SQL数据库执行此操作的方法:
安装和使用,它是节点对Rails中活动记录的ORM应答。它甚至有一个用于脚手架模型和迁移的CLI
节点——实验性repl等待
> 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 active record中一样访问所有模型。Sequelize需要一点时间来适应,但在许多方面,它实际上比active record更灵活,同时仍然具有相同的功能
Sequelize使用承诺,因此要在REPL中正确运行这些承诺,您需要在运行节点时使用--experimental REPL wait
标志。否则,您可能会得到bluebird承诺错误
如果您不想键入require(“./models”)第二步,您可以使用console.js(位于目录根目录下的REPL安装文件)来预加载此文件。但是,我发现只需在REPL中键入这一行就更容易了。您有一个如何进行预加载的示例吗?请更具体一些。我没有得到您的答案。这是OP想要做的更好的答案