瀏覽代碼

err || api err, use http delete, post ,get

mizozobu 6 年之前
父節點
當前提交
5b28d5bd50

+ 1 - 9
src/client/js/components/Admin/UserGroup/UserGroupCreateForm.jsx

@@ -36,23 +36,15 @@ class UserGroupCreateForm extends React.Component {
     e.preventDefault();
 
     try {
-      const res = await this.props.crowi.apiv3.post('/user-groups/create', {
+      const res = await this.props.crowi.apiv3.post('/user-groups', {
         name: this.state.name,
       });
 
-      if (res.errors) {
-        return apiErrorHandler(res.errors);
-      }
-
       const userGroup = res.data.userGroup;
       const userGroupId = userGroup._id;
 
       const res2 = await this.props.crowi.apiv3.get(`/user-groups/${userGroupId}/users`);
 
-      if (res2.errors) {
-        return apiErrorHandler(res.errors);
-      }
-
       const { users } = res2.data;
 
       this.props.onCreate(userGroup, users);

+ 1 - 5
src/client/js/components/Admin/UserGroup/UserGroupPage.jsx

@@ -60,15 +60,11 @@ class UserGroupPage extends React.Component {
 
   async deleteUserGroupById({ deleteGroupId, actionName, transferToUserGroupId }) {
     try {
-      const res = await this.props.crowi.apiv3.post(`/user-groups/${deleteGroupId}/delete`, {
+      const res = await this.props.crowi.apiv3.delete(`/user-groups/${deleteGroupId}`, {
         actionName,
         transferToUserGroupId,
       });
 
-      if (res.errors) {
-        return apiErrorHandler(res.errors);
-      }
-
       this.setState((prevState) => {
         const userGroups = prevState.userGroups.filter((userGroup) => {
           return userGroup._id !== deleteGroupId;

+ 1 - 1
src/client/js/util/Crowi.js

@@ -323,7 +323,7 @@ export default class Crowi {
       params._csrf = this.csrfToken;
     }
 
-    return this.apiv3Request('put', path, { params });
+    return this.apiv3Request('put', path, params);
   }
 
   apiv3Delete(path, params) {

+ 5 - 3
src/client/js/util/apiNotification.js

@@ -14,13 +14,15 @@ const errorFormatter = (err) => {
   return message;
 };
 
-export const apiErrorHandler = (err, header = 'Error') => {
+export const apiErrorHandler = (_err, header = 'Error') => {
+  // extract api errors from general 400 err
+  const err = _err.response ? _err.response.data.errors : _err;
   const errs = toArrayIfNot(err);
 
   for (const err of errs) {
-    logger.error(err);
+    logger.error(err.message);
 
-    toastr.error(errorFormatter(err), header, {
+    toastr.error(errorFormatter(err.message), header, {
       closeButton: true,
       progressBar: true,
       newestOnTop: false,

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

@@ -6,7 +6,7 @@ const express = require('express');
 
 const router = express.Router();
 
-const { body, param } = require('express-validator/check');
+const { body, param, query } = require('express-validator/check');
 
 const validator = {};
 
@@ -36,10 +36,10 @@ module.exports = (crowi) => {
   });
 
   validator.create = [
-    body('name').trim().exists(),
+    body('name', 'Group name is required').trim().exists(),
   ];
 
-  router.post('/create', loginRequired(crowi), adminRequired(), csrfVerify(crowi), validator.create, formValid(), async(req, res) => {
+  router.post('/', loginRequired(crowi), adminRequired(), csrfVerify(crowi), validator.create, formValid(), async(req, res) => {
     const { name } = req.body;
 
     try {
@@ -57,13 +57,13 @@ module.exports = (crowi) => {
 
   validator.delete = [
     param('id').trim().exists(),
-    body('actionName').trim().exists(),
-    body('transferToUserGroupId').trim(),
+    query('actionName').trim().exists(),
+    query('transferToUserGroupId').trim(),
   ];
 
-  router.post('/:id/delete', loginRequired(crowi), adminRequired(), csrfVerify(crowi), validator.delete, formValid(), async(req, res) => {
+  router.delete('/:id', loginRequired(crowi), adminRequired(), csrfVerify(crowi), validator.delete, formValid(), async(req, res) => {
     const { id: deleteGroupId } = req.params;
-    const { actionName, transferToUserGroupId } = req.body;
+    const { actionName, transferToUserGroupId } = req.query;
 
     try {
       const userGroup = await UserGroup.removeCompletelyById(deleteGroupId, actionName, transferToUserGroupId);
@@ -82,7 +82,7 @@ module.exports = (crowi) => {
   // });
 
   // update one group with the id
-  // router.post('/:id/update', async(req, res) => {
+  // router.put('/:id/update', async(req, res) => {
   // });
 
   router.get('/:id/users', loginRequired(crowi), adminRequired(), async(req, res) => {

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

@@ -5,8 +5,6 @@ const md5 = require('md5');
 const entities = require('entities');
 const { validationResult } = require('express-validator/check');
 
-const ApiResponse = require('./apiResponse');
-
 exports.csrfKeyGenerator = function(crowi, app) {
   return function(req, res, next) {
     const csrfKey = (req.session && req.session.id) || 'anon';
@@ -330,9 +328,9 @@ exports.formValid = function() {
 
     const errs = errObjArray.array().map((err) => {
       logger.error(`${err.param} in ${err.location}: ${err.msg}`);
-      return `${err.param}: ${err.msg}`;
-    }).join('\n');
+      return new Error(`${err.param}: ${err.msg}`);
+    });
 
-    return res.json(ApiResponse.error(errs));
+    return res.apiv3Err(errs);
   };
 };