mizozobu 6 лет назад
Родитель
Сommit
a0ce456df3

+ 9 - 22
src/server/crowi/express-init.js

@@ -23,6 +23,7 @@ module.exports = function(crowi, app) {
   const env = crowi.node_env;
   const middleware = require('../util/middlewares');
   const toArrayIfNot = require('../../lib/util/toArrayIfNot');
+  const ErrorV3 = require('../util/ErrorV3');
 
   // Old type config API
   const config = crowi.getConfig();
@@ -162,37 +163,23 @@ module.exports = function(crowi, app) {
     this.json({ data: obj });
   };
 
-  express.response.apiv3Err = function(errs, status = 400) { // not arrow function
+  express.response.apiv3Err = function(_err, status = 400) { // not arrow function
     if (!Number.isInteger(status)) {
       throw new Error('invalid status supplied to res.apiv3Err');
     }
 
-    let errors = toArrayIfNot(errs);
-    errors = errors.map((_err) => {
-      const err = {};
-
-      if (_err instanceof Error) {
-        let message = _err.toString();
-
-        const prefixRegexp = /^Error: /;
-        if (prefixRegexp.test(message)) {
-          message = message.replace(prefixRegexp, '');
-        }
-
-        err.message = message;
-
-        return err;
+    let errors = toArrayIfNot(_err);
+    errors = errors.map((e) => {
+      if (e instanceof ErrorV3) {
+        return e;
       }
-      if (typeof _err === 'string') {
-        err.message = _err;
-        return err;
+      if (typeof e === 'string') {
+        return { message: e };
       }
 
       throw new Error('invalid error supplied to res.apiv3Err');
     });
 
-    this.status(status).json({
-      errors: toArrayIfNot(errors),
-    });
+    this.status(status).json({ errors });
   };
 };

+ 3 - 1
src/server/routes/apiv3/user-group-relation.js

@@ -6,6 +6,7 @@ const express = require('express');
 
 const router = express.Router();
 
+const ErrorV3 = require('../../util/ErrorV3');
 const {
   accessTokenParser,
   loginRequired,
@@ -41,8 +42,9 @@ module.exports = (crowi) => {
       return res.apiv3(data);
     }
     catch (err) {
+      const msg = 'Error occurred in fetching user group relations';
       logger.error('Error', err);
-      return res.apiv3Err('Error occurred in fetching user group relations');
+      return res.apiv3Err(new ErrorV3(msg, 'user-group-relation-list-fetch-failed'));
     }
   });
 

+ 8 - 7
src/server/routes/apiv3/user-group.js

@@ -7,9 +7,7 @@ const express = require('express');
 const router = express.Router();
 
 const { body, param, query } = require('express-validator/check');
-
-const validator = {};
-
+const ErrorV3 = require('../../util/ErrorV3');
 const {
   accessTokenParser,
   csrfVerify,
@@ -18,6 +16,8 @@ const {
   formValid,
 } = require('../../util/middlewares');
 
+const validator = {};
+
 module.exports = (crowi) => {
   const { UserGroup, UserGroupRelation } = crowi.models;
 
@@ -30,8 +30,9 @@ module.exports = (crowi) => {
       return res.apiv3({ userGroups });
     }
     catch (err) {
+      const msg = 'Error occurred in fetching user group list';
       logger.error('Error', err);
-      return res.apiv3Err('Error occurred in fetching user groups');
+      return res.apiv3Err(new ErrorV3(msg, 'user-group-list-fetch-failed'));
     }
   });
 
@@ -51,7 +52,7 @@ module.exports = (crowi) => {
     catch (err) {
       const msg = 'Error occurred in creating a user group';
       logger.error(msg, err);
-      return res.apiv3Err(msg);
+      return res.apiv3Err(new ErrorV3(msg, 'user-group-create-failed'));
     }
   });
 
@@ -73,7 +74,7 @@ module.exports = (crowi) => {
     catch (err) {
       const msg = 'Error occurred in deleting a user group';
       logger.error(msg, err);
-      return res.apiv3Err(msg);
+      return res.apiv3Err(new ErrorV3(msg, 'user-group-delete-failed'));
     }
   });
 
@@ -101,7 +102,7 @@ module.exports = (crowi) => {
     catch (err) {
       const msg = `Error occurred in fetching users for group: ${id}`;
       logger.error(msg, err);
-      return res.apiv3Err(msg);
+      return res.apiv3Err(new ErrorV3(msg, 'user-group-fetch-failed'));
     }
   });
 

+ 11 - 0
src/server/util/ErrorV3.js

@@ -0,0 +1,11 @@
+class ErrorV3 extends Error {
+
+  constructor(message = '', code = '') {
+    super(); // do not provide message to the super constructor
+    this.message = message;
+    this.code = code;
+  }
+
+}
+
+module.exports = ErrorV3;

+ 3 - 1
src/server/util/middlewares.js

@@ -4,6 +4,7 @@ const pathUtils = require('growi-commons').pathUtils;
 const md5 = require('md5');
 const entities = require('entities');
 const { validationResult } = require('express-validator/check');
+const ErrorV3 = require('./ErrorV3');
 
 exports.csrfKeyGenerator = function(crowi, app) {
   return function(req, res, next) {
@@ -328,7 +329,8 @@ exports.formValid = function() {
 
     const errs = errObjArray.array().map((err) => {
       logger.error(`${err.param} in ${err.location}: ${err.msg}`);
-      return new Error(`${err.param}: ${err.msg}`);
+      const errrr = new ErrorV3(`${err.param}: ${err.msg}`, 'validation_failed');
+      return errrr;
     });
 
     return res.apiv3Err(errs);