我正在尝试使用Node.js Express框架,并寻找一个插件,可以让我通过控制台与我的模型交互,类似于Rails控制台。在NodeJS世界中是否有这样的东西?
如果没有,我该如何与我的Node.js模型和数据进行交互,例如手动添加/删除对象,在数据上测试方法等等?
我正在尝试使用Node.js Express框架,并寻找一个插件,可以让我通过控制台与我的模型交互,类似于Rails控制台。在NodeJS世界中是否有这样的东西?
如果没有,我该如何与我的Node.js模型和数据进行交互,例如手动添加/删除对象,在数据上测试方法等等?
var repl = require("repl");
var replServer = repl.start({});
加载repl。replServer.context.<your_variable_names_here> = <your_variable_names_here>
将repl连接到你的关键变量。这使得该变量在REPL(node控制台)中可用/可使用。var db = require('./models/db')
,则请将以下行添加到你的console.js中。 var db = require('./models/db');
replServer.context.db = db;
node 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有一个很好的建议,可以在sequelize ORM中运行(或者任何需要promise处理的东西)。
我现在也在运行sequelize,对于我的node控制台,我正在添加--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 });
我不是很擅长使用Node,但您可以在命令行中输入node
来进入Node控制台。然后我会手动require模型。
以下是使用 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 active record中一样访问所有模型。Sequelize需要一些适应,但从许多方面来说,它实际上比Active Record更灵活,同时具有相同的功能。
Sequelize使用promises,因此要正确运行它们,您需要在运行node时使用--experimental-repl-await
标志。否则,您可能会遇到bluebird promise错误。
如果您不想键入require('./models')步骤,则可以使用console.js - 位于您目录的根目录下的REPL设置文件 - 预加载此步骤。但是,我发现在REPL中只需键入这一行更容易。
很简单:在你的程序中添加一个REPL。
这可能不能完全回答你的问题,但需要澄清的是,Node.js比Rails更底层,因此不像Rails那样定义工具和数据模型。它更像是一个平台而不是框架。
如果你正在寻找更类似于Rails的体验,可以考虑使用基于Node.js构建的更“全面”的框架,例如Meteor等。