有时,我们需要在将响应JSON数据发送到客户端之前对其进行修改。例如:
//model definition
{
"name": "File",
"base": "PersistedModel",
"properties": {
"filename": {
"type": "string",
"required": true
},
"filepath": {
"type": "string"
}
}
"protected": ["filepath"]
}
我希望在GET url
请求中获得/files/:id
属性,因此我在原型上定义了一个url GETTER。
//file.js
module.exports = function(File){
var baseUrl = 'http://example.com/uploads/files/';
File.prototype.__defineGetter__('url', function(){
return baseUrl + this.id.toString() + this.filename;
});
}
我的问题是如何在我提出请求时将url
属性公开给远程响应?
GET /files/123456
期待回复如下:
{
id: '123456',
filename: 'myfile.ext',
url: 'http://example.com/uploads/files/123456/myfile.ext'
}
非常感谢!
答案 0 :(得分:2)
使用远程方法/挂钩并相应地自定义您的响应。请参阅https://github.com/strongloop/loopback-example-app-logic/blob/master/common/models/car.js。
答案 1 :(得分:1)
您可以使用Operation Hooks来拦截CRUD操作,而不依赖于调用它们的特定方法。
下面的代码将在加载File对象时将url
属性添加到File对象。
File.observe('loaded', function(ctx, next) {
var baseUrl = 'http://example.com/uploads/files/';
ctx.data.url = baseUrl + data.id + data.filename;
next();
});
当调用以下任何方法时,无论是直接在JS中还是通过HTTP API间接调用,都会调用此方法。
其他操作挂钩包括: