如何将每个API响应包装到SailsJS中的标准回复对象中?

Not*_*ent 7 sails.js

我是Sails的新手,我正在尝试找出为每个API响应返回标准对象的最佳/正确方法.

我们的前端需要的容器是:

{
    "success": true/false,
    "session": true/false,
    "errors": [],
    "payload": []
}
Run Code Online (Sandbox Code Playgroud)

目前,我正在覆盖每个控制器中的蓝图操作,就像这个例子一样(这看起来非常非常错误):

   find : function( req, res ){

    var id = req.param( 'id' );

    Foo.findOne( { id : id } ).exec( function( err, aFoo ){

      res.json(
        AppSvc.jsonReply(
          req,
          [],
          aFoo
        ), 200
      );
    });

  }
Run Code Online (Sandbox Code Playgroud)

在AppSvc.js中:

  jsonReply : function( req, errors, data ){

    return {
      success : ( errors && errors.length ? false : true ),
      session : ( req.session.authenticated === true ),
      errors  : ( errors && errors.length ? errors : [] ),
      payload : ( data ? data : [] )
    };

  }
Run Code Online (Sandbox Code Playgroud)

另外,我必须res.json()为每个默认响应修改每个方法(badRequest,notFound等).再次,这感觉很错误.

那么,如何将所有API响应正确地汇集到标准容器中?

小智 7

帆自定义响应对此非常有用.

如果你查看蓝图代码,你会看到每个代码在完成后调用res.ok:https://github.com/balderdashy/sails/blob/master/lib/hooks/blueprints/actions/find.js #L63

您可以将自己的文件 - ok.js - 添加到api/responses/ - 这将覆盖默认的内置处理程序.

https://github.com/balderdashy/sails/blob/master/lib/hooks/responses/defaults/ok.js < - 只需将其复制并粘贴即可开始,并根据需要进行调整.