Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Node.js的Rails控制台的等效性_Ruby On Rails_Node.js_Console_Rails Console - Fatal编程技术网

Ruby on rails Node.js的Rails控制台的等效性

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 Express框架,并寻找一个插件,该插件允许我通过控制台与模型交互,类似于Rails控制台。在NodeJS的世界里有这样的事情吗


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

这可能无法完全回答您的问题,但要澄清的是,Node.js的级别远低于Rails,因此没有规定Rails之类的工具和数据模型。与其说它是一个框架,不如说它是一个平台


如果您希望获得更像Rails的体验,您可能希望看到构建在node.js之上的更“全功能”的框架,例如,等等。

我在使用node方面不是很有经验,但您可以在命令行中输入
node
,以访问节点控制台。然后,我习惯于手动要求模型

很简单:向程序中添加一个

创建自己的REPL,方法是创建一个js文件(即:console.js),其中包含以下行/组件:

  • Require节点的内置repl:
    var repl=Require(“repl”)
  • 加载所有的关键变量,如db、任何你发誓使用的库等
  • 使用
    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想要做的更好的答案