Răsfoiți Sursa

Merge pull request #4247 from weseek/support/supress-warnings-for-mongo

support: Supress warnings for mongo
Yuki Takei 4 ani în urmă
părinte
comite
18e8d637f8

+ 6 - 6
packages/app/config/migrate.js

@@ -5,9 +5,13 @@
  * @author Yuki Takei <yuki@weseek.co.jp>
  * @author Yuki Takei <yuki@weseek.co.jp>
  */
  */
 
 
+import mongoose from 'mongoose';
+
+import { initMongooseGlobalSettings, getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
+
 const { URL } = require('url');
 const { URL } = require('url');
 
 
-const { getMongoUri } = require('~/server/util/mongoose-utils');
+initMongooseGlobalSettings();
 
 
 const mongoUri = getMongoUri();
 const mongoUri = getMongoUri();
 
 
@@ -17,11 +21,7 @@ const url = new URL(mongoUri);
 const mongodb = {
 const mongodb = {
   url: mongoUri,
   url: mongoUri,
   databaseName: url.pathname.substring(1), // omit heading slash
   databaseName: url.pathname.substring(1), // omit heading slash
-  options: {
-    useNewUrlParser: true, // removes a deprecation warning when connecting
-    useUnifiedTopology: true,
-    useFindAndModify: false,
-  },
+  options: mongoOptions,
 };
 };
 
 
 module.exports = {
 module.exports = {

+ 3 - 1
packages/app/src/server/console.js

@@ -2,7 +2,7 @@ const repl = require('repl');
 const fs = require('fs');
 const fs = require('fs');
 const path = require('path');
 const path = require('path');
 const mongoose = require('mongoose');
 const mongoose = require('mongoose');
-const { getMongoUri, mongoOptions } = require('~/server/util/mongoose-utils');
+const { initMongooseGlobalSettings, getMongoUri, mongoOptions } = require('~/server/util/mongoose-utils');
 
 
 const models = require('./models');
 const models = require('./models');
 
 
@@ -32,6 +32,8 @@ fs.readFile(replHistoryPath, 'utf8', (err, data) => {
 replServer.context.mongoose = mongoose;
 replServer.context.mongoose = mongoose;
 replServer.context.models = models;
 replServer.context.models = models;
 
 
+initMongooseGlobalSettings();
+
 mongoose.connect(getMongoUri(), mongoOptions)
 mongoose.connect(getMongoUri(), mongoOptions)
   .then(() => {
   .then(() => {
     replServer.context.db = mongoose.connection.db;
     replServer.context.db = mongoose.connection.db;

+ 3 - 1
packages/app/src/server/crowi/index.js

@@ -9,7 +9,7 @@ import CdnResourcesService from '~/services/cdn-resources-service';
 import InterceptorManager from '~/services/interceptor-manager';
 import InterceptorManager from '~/services/interceptor-manager';
 import Xss from '~/services/xss';
 import Xss from '~/services/xss';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
-import { getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
+import { initMongooseGlobalSettings, getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 import { projectRoot } from '~/utils/project-dir-utils';
 import { projectRoot } from '~/utils/project-dir-utils';
 
 
 import ConfigManager from '../service/config-manager';
 import ConfigManager from '../service/config-manager';
@@ -214,6 +214,8 @@ Crowi.prototype.setupDatabase = function() {
   // mongoUri = mongodb://user:password@host/dbname
   // mongoUri = mongodb://user:password@host/dbname
   const mongoUri = getMongoUri();
   const mongoUri = getMongoUri();
 
 
+  initMongooseGlobalSettings();
+
   return mongoose.connect(mongoUri, mongoOptions);
   return mongoose.connect(mongoUri, mongoOptions);
 };
 };
 
 

+ 11 - 1
packages/app/src/server/util/mongoose-utils.ts

@@ -2,6 +2,13 @@ import mongoose, {
   Model, Document, ConnectionOptions, Schema,
   Model, Document, ConnectionOptions, Schema,
 } from 'mongoose';
 } from 'mongoose';
 
 
+export const initMongooseGlobalSettings = (): void => {
+  // supress deprecation warnings
+  // see: https://mongoosejs.com/docs/deprecations.html
+  mongoose.set('useFindAndModify', false);
+  mongoose.set('useCreateIndex', true);
+};
+
 export const getMongoUri = (): string => {
 export const getMongoUri = (): string => {
   const { env } = process;
   const { env } = process;
 
 
@@ -26,6 +33,9 @@ export const getOrCreateModel = <Interface, Method>(modelName: string, schema: S
   return mongoose.model<Interface & Document, Method & Model<Interface & Document>>(modelName, schema);
   return mongoose.model<Interface & Document, Method & Model<Interface & Document>>(modelName, schema);
 };
 };
 
 
+// supress deprecation warnings
+// see: https://mongoosejs.com/docs/deprecations.html
 export const mongoOptions: ConnectionOptions = {
 export const mongoOptions: ConnectionOptions = {
-  useFindAndModify: false,
+  useNewUrlParser: true,
+  useUnifiedTopology: true,
 };
 };

+ 4 - 0
packages/app/src/test/config/migrate.test.js

@@ -13,9 +13,12 @@ describe('config/migrate.js', () => {
   `('returns', ({ MONGO_URI, expectedUrl, expectedDbName }) => {
   `('returns', ({ MONGO_URI, expectedUrl, expectedDbName }) => {
     test(`when 'MONGO_URI' is '${MONGO_URI}`, () => {
     test(`when 'MONGO_URI' is '${MONGO_URI}`, () => {
 
 
+      const initMongooseGlobalSettingsMock = jest.fn();
+
       // mock for mongoose-utils
       // mock for mongoose-utils
       jest.doMock('~/server/util/mongoose-utils', () => {
       jest.doMock('~/server/util/mongoose-utils', () => {
         return {
         return {
+          initMongooseGlobalSettings: initMongooseGlobalSettingsMock,
           getMongoUri: () => {
           getMongoUri: () => {
             return MONGO_URI;
             return MONGO_URI;
           },
           },
@@ -26,6 +29,7 @@ describe('config/migrate.js', () => {
 
 
       jest.dontMock('~/server/util/mongoose-utils');
       jest.dontMock('~/server/util/mongoose-utils');
 
 
+      expect(initMongooseGlobalSettingsMock).toHaveBeenCalledTimes(1);
       expect(mongoUri).toBe(MONGO_URI);
       expect(mongoUri).toBe(MONGO_URI);
       expect(mongodb.url).toBe(expectedUrl);
       expect(mongodb.url).toBe(expectedUrl);
       expect(mongodb.databaseName).toBe(expectedDbName);
       expect(mongodb.databaseName).toBe(expectedDbName);

+ 3 - 1
packages/app/src/test/global-setup.js

@@ -9,7 +9,7 @@ import 'tsconfig-paths/register';
 
 
 import mongoose from 'mongoose';
 import mongoose from 'mongoose';
 
 
-import { getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
+import { initMongooseGlobalSettings, getMongoUri, mongoOptions } from '~/server/util/mongoose-utils';
 
 
 // check env
 // check env
 if (process.env.NODE_ENV !== 'test') {
 if (process.env.NODE_ENV !== 'test') {
@@ -21,6 +21,8 @@ if (process.env.NODE_ENV !== 'test') {
 // const { getInstance } = require('./setup-crowi');
 // const { getInstance } = require('./setup-crowi');
 
 
 module.exports = async() => {
 module.exports = async() => {
+  initMongooseGlobalSettings();
+
   await mongoose.connect(getMongoUri(), mongoOptions);
   await mongoose.connect(getMongoUri(), mongoOptions);
 
 
   // drop database
   // drop database

+ 2 - 1
packages/app/src/test/setup.js

@@ -7,13 +7,14 @@
 
 
 const mongoose = require('mongoose');
 const mongoose = require('mongoose');
 
 
-const { getMongoUri, mongoOptions } = require('~/server/util/mongoose-utils');
+const { initMongooseGlobalSettings, getMongoUri, mongoOptions } = require('~/server/util/mongoose-utils');
 
 
 mongoose.Promise = global.Promise;
 mongoose.Promise = global.Promise;
 
 
 jest.setTimeout(30000); // default 5000
 jest.setTimeout(30000); // default 5000
 
 
 beforeAll(async() => {
 beforeAll(async() => {
+  initMongooseGlobalSettings();
   await mongoose.connect(getMongoUri(), mongoOptions);
   await mongoose.connect(getMongoUri(), mongoOptions);
 });
 });