我是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响应正确地汇集到标准容器中呢?
答案 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< - 只需将其复制并粘贴即可开始,并根据需要进行调整。