diff --git a/pkg/apigateway/handler/request.go b/pkg/apigateway/handler/request.go index 13a3ece3be..f910960622 100644 --- a/pkg/apigateway/handler/request.go +++ b/pkg/apigateway/handler/request.go @@ -143,7 +143,9 @@ func (req Request) findMod(resKey string) (modulebase.Manager, error) { resName := req.params[resKey] module, err := modulebase.GetModule(req.session, resName) if err != nil { - return nil, errors.Errorf("found module by %s: %v", resName, err) + // preserve the error chain, so unknown modules (cause + // errors.ErrNotFound) are reported as 404 instead of 500 + return nil, errors.Wrapf(err, "found module by %s", resName) } if module == nil { return nil, httperrors.NewNotFoundError("resource %s module not exists", resName) diff --git a/pkg/mcclient/modulebase/modules.go b/pkg/mcclient/modulebase/modules.go index 2e72018c51..94772cd4d2 100644 --- a/pkg/mcclient/modulebase/modules.go +++ b/pkg/mcclient/modulebase/modules.go @@ -294,7 +294,9 @@ func registerAllJointModules() { func _getModule(session *mcclient.ClientSession, name string) (IBaseManager, error) { mods, ok := modules[name] if !ok { - return nil, fmt.Errorf("No such module %s", name) + // unknown module means the request URL does not exist: a client + // error (404), not a server error + return nil, errors.Wrapf(errors.ErrNotFound, "No such module %s", name) } if len(mods) == 1 {