console.js 1.4 KB

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