console.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. const fs = require('fs');
  2. const path = require('path');
  3. const repl = require('repl');
  4. const mongoose = require('mongoose');
  5. const { getMongoUri, mongoOptions } = require('~/server/util/mongoose-utils');
  6. const models = require('./models');
  7. Object.keys(models).forEach((modelName) => {
  8. global[modelName] = models[modelName];
  9. });
  10. mongoose.Promise = global.Promise;
  11. const replServer = repl.start({
  12. prompt: `${process.env.NODE_ENV} > `,
  13. ignoreUndefined: true,
  14. });
  15. // add history function into repl
  16. // see: https://qiita.com/acro5piano/items/dc62b94d7b04505a4aca
  17. // see: https://qiita.com/potato4d/items/7131028497de53ceb48e
  18. const userHome = process.env[process.platform === 'win32' ? 'USERPROFILE' : 'HOME'];
  19. const replHistoryPath = path.join(userHome, '.node_repl_history');
  20. fs.readFile(replHistoryPath, 'utf8', (err, data) => {
  21. if (err != null) {
  22. return;
  23. }
  24. return data.split('\n').forEach((command) => { return replServer.history.push(command) });
  25. });
  26. replServer.context.mongoose = mongoose;
  27. replServer.context.models = models;
  28. mongoose.connect(getMongoUri(), mongoOptions)
  29. .then(() => {
  30. replServer.context.db = mongoose.connection.db;
  31. });
  32. replServer.on('exit', () => {
  33. fs.writeFile(replHistoryPath, replServer.history.join('\n'), (err) => {
  34. console.log(err); // eslint-disable-line no-console
  35. process.exit();
  36. });
  37. });