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

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

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

【问题讨论】:

    标签: ruby-on-rails node.js console rails-console


    【解决方案1】:

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

    1. 需要节点的内置repl:var repl = require("repl");
    2. 加载所有关键变量,如 db、任何你发誓的库等。
    3. 使用var replServer = repl.start({}); 加载repl
    4. 使用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;
    
    1. 使用命令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 等。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-05-02
          • 1970-01-01
          • 1970-01-01
          • 2012-03-24
          • 2013-01-06
          • 1970-01-01
          • 2015-02-16
          • 1970-01-01
          相关资源
          最近更新 更多