我是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 < - 只需将其复制并粘贴即可开始,并根据需要进行调整.