Подтвердить что ты не робот

Эквивалентность консоли Rails для Node.js

Я пытаюсь выполнить Node.js Express framework и ищет плагин, который позволяет мне взаимодействовать с моими моделями через консоль, подобно консоли Rails. Есть ли такая вещь в мире NodeJS?

Если нет, как я могу взаимодействовать с моделями и данными Node.js, например, вручную добавлять/удалять объекты, методы тестирования данных и т.д.?

4b9b3361

Ответ 1

Все просто: добавьте REPL в свою программу

Ответ 2

Создайте свой собственный REPL, создав файл js (то есть: console.js) со следующими строками/компонентами:

  1. Требуется встроенный узел repl: var repl = require("repl");
  2. Загрузите все ваши ключевые переменные, такие как db, любые библиотеки, которыми вы клянетесь, и т.д.
  3. Загрузите ответ с помощью var replServer = repl.start({});
  4. Прикрепите repl к вашим ключевым переменным с помощью replServer.context.<your_variable_names_here> = <your_variable_names_here>. Это делает переменную доступной/используемой в 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

Спасибо Дерику Бэйли за эту информацию.


UPDATE:

У GavinBelson есть отличная рекомендация для работы с секвелированием ORM (или чем-то, что требует обработки обещаний в репле).

Сейчас я также использую sequelize, и для консоли своего узла я добавляю флаг --experimental-repl-await.

Это много, чтобы набирать каждый раз, поэтому я настоятельно советую добавить:

"console": "node --experimental-repl-await ./console.js"

в раздел scripts в package.json, чтобы вы могли просто запустить:

npm run console

и не нужно печатать все это целиком.

Затем вы можете обрабатывать обещания, не получая ошибок, например:

const product = await Product.findOne({ where: { id: 1 });

Ответ 3

Я не очень разбираюсь в использовании node, но вы можете ввести node в командной строке, чтобы перейти в консоль node. Затем я использовал модели вручную

Ответ 4

Это может не полностью ответить на ваш вопрос, но, чтобы уточнить, файл node.js гораздо более низкого уровня, чем Rails, и как таковой не предписывает инструменты и модели данных, такие как Rails. Это больше платформа, чем фреймворк.

Если вы ищете более похожий на Rails опыт, возможно, вы захотите взглянуть на более "полнофункциональный" фреймворк, построенный на основе node.js, такой как Meteor и т.д.

Ответ 5

Вот способ сделать это с базами данных SQL:

Установите и используйте Sequelize, это ответ Node ORM на Active Record в Rails. У этого даже есть 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 использует обещания, поэтому для их правильного запуска в REPL вы захотите использовать флаг --experimental-repl-await при запуске узла. В противном случае вы можете получить ошибки обещания Bluebird

Если вы не хотите вводить этап require ('./models'), вы можете использовать console.js - установочный файл для REPL в корне вашего каталога - для предварительной загрузки. Тем не менее, мне легче набрать эту строку в REPL