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

时间:2014-05-07 21:00:32

标签: sails.js

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

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

{
    "success": true/false,
    "session": true/false,
    "errors": [],
    "payload": []
}

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

   find : function( req, res ){

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

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

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

  }

在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 : [] )
    };

  }

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

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

1 个答案:

答案 0 :(得分:7)

Sails自定义响应非常适合。

如果您查看蓝图代码,您会看到每个代码在完成后都会调用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< - 只需将其复制并粘贴即可开始,并根据需要进行调整。